ZigZag转换,是什么意思?这个是困扰大家解题的关键。本质就是Z字形转换:将字符串换Z字排好,或者是倒“N”型排好;然后再按行重新组成新的字符串。
var convert = function(s, numRows) {
var stopPoint = [];
// 返回字串
var result = "";
// 特殊情况返回
if(numRows >= s.length || numRows<2) return s;
// 创造顶点
for(var i = 0; i < s.length + 2*numRows - 2; i += 2*numRows - 2){
stopPoint.push(i);
}
// 去除第一个节点 0 ,单支不留;也可以不去掉,判断 undefined
stopPoint.shift();
// 首行,左右相等,加减为0
result += s[0];
for(var i = 0; i<stopPoint.length; i++){
result += s[stopPoint[i]] == undefined?"":s[stopPoint[i]];
}
// 正常行
for(var i = 1; i < numRows - 1; i++){
var j = 0;
result += s[i];
while( j < stopPoint.length ){
result += (s[stopPoint[j] - i] == undefined ? "" : s[stopPoint[j] - i]) + (s[stopPoint[j] + i] == undefined ? "" : s[stopPoint[j] + i]);
j++;
}
}
// 末行
for(var i = numRows - 1; i < s.length; i += 2*numRows - 2){
result += (s[i] == undefined? "":s[i]);
}
return result;
};