Open 1684838553 opened 2 years ago
解题思路 看示例1容易迷惑,直接看示例 2,明确 Z 字形的方向。
输入:s = "PAYPALISHIRING", numRows = 4 输出:"PINALSIGYAHRPI" 解释:
P I N A L S I G Y A H R P I 一个字母一个字母看,发现规律,行下标是从 0 一步步递增到 numRows - 1 ,再递减会 0,如此反复。我们可以用一个二维数组存下遍历到每一行时的字母,最后再拼接成字符串。
作者:scnu_evan 链接:https://leetcode.cn/problems/zigzag-conversion/solution/javascript-6-z-zi-xing-bian-huan-by-scnu-hg1o/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
/**
* @param {string} s
* @param {number} numRows
* @return {string}
*/
var convert = function(s, numRows) {
if (numRows === 1) {
return s
}
const arr = new Array(numRows).fill(0)
.map(() => [])
let index = 0
let dir = 0
for (let i = 0; i < s.length; i ++) {
if (dir === 0 && index === numRows - 1) {
dir = 1
} else if (dir === 1 && index === 0) {
dir = 0
}
const char = s[i]
arr[index].push(char)
dir === 0 ? index ++ : index --
}
return arr.reduce((cur, next) => cur + next.join(''), '')
};
比如输入字符串为 "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"
https://leetcode.cn/problems/zigzag-conversion/