6.Z字形变换
2020-03-13
Z字形变换
将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L C I R E T O E S I I G E D H N 之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。
请你实现这个将字符串进行指定行数变换的函数
比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L C I R E T O E S I I G E D H N 之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。
请你实现这个将字符串进行指定行数变换的函数
示例:
输入: s = "LEETCODEISHIRING", numRows = 3
输出: LCIRETOESIIGEDHN
输入: s = "LEETCODEISHIRING", numRows = 4
输出: LDREOEIIECIHNTSG
解释:
L D R
E O E I I
E C I H N
T S G
E O E I I
E C I H N
T S G
题解:
思路1:模拟法
var convert = function (s, numRows) { if (numRows === 1) return s; // 如果是1直接返回本身 let resultArr = new Array(numRows).fill(''); // 创建一个存字符串数组装模拟法分割出的字符串 s = s.split(''); let i = 0; // 记录当前在第几行 let down = true; // 记录当前应该向上还是向下 s.forEach(item => { resultArr[i] += item; // 字符串数组的第i行拼接item if (i === numRows - 1) down = false; // 如果到了最后一行则改变方向向上 else if (i === 0) down = true; // 如果是第一行则向下 if (down) i++; else i--; }); let result = ''; for (let i = 0; i < resultArr.length; i++) { result += resultArr[i]; // 字符串数组拼接成结果返回 } return result; };