题目:
将一个给定字符串 s
根据给定的行数 numRows
,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 "PAYPALISHIRING"
行数为 3
时,排列如下:
P A H N A P L S I I G Y I R
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"
。
思路:
根据Z字形把字符串中每个字符的坐标算出并存起来,遍历存储的坐标,把每一行的字母拼接起来。
代码:
/*** @param {string} s* @param {number} numRows* @return {string}*/
var convert = function (s, numRows) {if (numRows === 1) return slet x = 0 // 列let y = 0 // 行let way = 1 // 1向下走,-1向上走let data = [] // 存numRows的每个元素Z字形对应的坐标for (let i = 0; i < s.length; i++) {data.push([y, x, s[i]])way === 1 ? y++ : y--if (way === -1) {// 斜着走时x才加x++}if (y === 0) {way = 1}if (y === numRows - 1) {way = -1}}let res = ''for (let i = 0; i < numRows; i++) { // 拼接每一行let row = data.filter(e => e[0] === i).map(e => e[2]).join('')res += row}return res
};