一、题目描述:
leetcode-cn.com/problems/zi… 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。
****示例 1:
输入:s = "PAYPALISHIRING", numRows = 3
P A H N
A P L S I I G
Y I R
输出:"PAHNAPLSIIGYIR"
二、思路分析:
- 开辟一个长度为行数的数组用于保存,没行进行z字变化后的字符串解
- 每一个循环处理一个最小单元的字符串,即一个垂直与y轴的字符串与一个斜着的字符串,最小单元的字符串长度为2*numRows - 2
- 分类处理,两种情况:
- 一种是垂直与y轴的,这种行数为numRows
- 另一种为斜着的,这种行数为numRows - 2
三、AC 代码:
/**
* @param {string} s
* @param {number} numRows
* @return {string}
*/
var convert = function (s, numRows) {
const sArr = new Array(numRows).fill("")
let nIndex = 0
while(nIndex < s.length){
for(let i=0;i<numRows && nIndex<s.length;i++){
sArr[i]+=s[nIndex]
nIndex++
}
for(let i = numRows-2;i>=1 && nIndex<s.length;i--){
sArr[i]+=s[nIndex]
nIndex++
}
}
return sArr.reduce((acrr,curr)=>{
return acrr+curr
},"")
};
四、总结:
- 找规律,先求最小单元的解,最后推导总答案