这道题可以认为是一道找规律的题了 Z字形的字母相隔与他所在的层数都有关系
第一层与最后一层都是2(rows-1)(rows为总层数)的关系
其他层数为2(rows - i)(rows为总层数 i为当前层数)与2(rows-1) - 2(rows - i)即2*(i - 1)交替的关系
/**
* @param {string} s
* @param {number} numRows
* @return {string}
*/
var convert = function(s, numRows) {
//处理特殊情况只有一行
if(numRows == 1) {
return s;
}
var i = 1,result = [];
function calrow(row) {
//计算相对差 只有首行和尾行相对差一直不变
var all = 2 * (numRows - 1), relative = row == numRows ? all : 2 * (numRows - row);
//单独处理首尾行
if(row == 1 || row == numRows) {
while(s[row - 1] !== undefined) {
result.push(s[row - 1]);
row = row + all;
}
} else {
while(s[row - 1] !== undefined) {
result.push(s[row - 1]);
row = row + relative;
//计算交替差
relative = all - relative;
}
}
}
计算每一行
for(;i <= numRows;i++) {
calrow(i);
}
return result.join('');
};