将字符串 “PAYPALISHIRING” 以Z字形排列成给定的行数:
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
您是否在真实的面试环节中遇到过这道题目呢?
思路:首位两行中相邻两个元素的index之差跟行数是相关的,为 2*nRows - 2,然后依据这个依次找出每个字母的位置
/**
* @param {string} s
* @param {number} numRows
* @return {string}
*/
var convert = function (s, numRows) {
if (numRows <= 1) return s;
let res = "";
let size = 2 * numRows - 2;
for (let i = 0; i < numRows; ++i) {
for (let j = i; j < s.length; j += size) {
res += s[j];
let tmp = j + size - 2 * i;
if (i != 0 && i != numRows - 1 && tmp < s.length) res += s[tmp];
}
}
return res;
};