題目描述
將一個給定字串 s 根據給定的行數 numRows ,以從上往下、從左到右進行 Z 字形排列,
比如輸入字串為 "PAYPALISHIRING" 行數為 3 時,排列如下:
P A H N
A P L S I I G
Y I R
之后,你的輸出需要從左往右逐行讀取,產生出一個新的字串,比如:"PAHNAPLSIIGYIR",
請你實作這個將字串進行指定行數變換的函式:
string convert(string s, int numRows);
示例 1:
輸入:s = "PAYPALISHIRING", numRows = 3
輸出:"PAHNAPLSIIGYIR"
示例 2:
輸入:s = "PAYPALISHIRING", numRows = 4
輸出:"PINALSIGYAHRPI"
解釋:
P I N
A L S I G
Y A H R
P I
示例 3:
輸入:s = "A", numRows = 1
輸出:"A"
提示:
1 <= s.length <= 1000
s 由英文字母(小寫和大寫)、',' 和 '.' 組成
1 <= numRows <= 1000
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/zigzag-conversion
著作權歸領扣網路所有,商業轉載請聯系官方授權,非商業轉載請注明出處,
題目來自力扣
---------------------------------------------------------------------------------------------------------------------------------
下面是答案
function convert (s, numRows) {
if (numRows == 1)
return s
const len = Math.min(numRows, s.length)
let arr=[]
for (let i=0; i < len; i++)
arr[i] = '';
let m = 0;
let dwon = false
for (let i of s) {
arr[m] += i;
if (m == 0 || m==numRows-1) {
dwon = !dwon;
}
m += dwon ? 1 : -1;
}
let str = ''
for (let i of arr) {
str+= i
}
return str
}
console.log(convert("PAYPALISHIRING", 4));
z字變換,就是把一串字串先向下,再向右上,再向下,這樣,依次,排列出Z字的樣子,
如果傳入的numRows值為1,結果就是原陣列,直接原樣輸出即可,然后定義一個陣列,把陣列的值設為‘’,方便一會進行傳值,利用for of遍歷陣列,將陣列依次加字串的每個字符,然后判斷,當陣列執行到最下面時候,就讓陣列開始倒著添加,
最后把陣列,轉換成字串
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/291878.html
標籤:其他
