这是一道找规律的题目
下图是一个长度为23的字符串,在行数为5的情况下其元素对应的情况
我们将其按规律分割成三部分,相邻部分之间同一位置的元素相差的step = numRows + (numRows - 1)
针对其中一个部分继续分割,可以发现第一行和最后一行都是只有一个元素;而中间有一行中有两个元素
对上图继续进行分析可以发现非首尾行元素的第二个元素是(7)等于下一个部分首元素(8)减去非首尾行第一个元素所在行数(1)
于是就可以根据这个规律进行代码的编写了,总体的图片如下
var convert = function (s, numRows) {
if (numRows == 1) {
return s;
}
var len = s.length + numRows-1;
var step = numRows + (numRows - 2);
var i,j, result = "";
for(i=0; i<numRows; i++){
if(i>0 && i<numRows-1){
let dis = numRows - i-1;
for (j = numRows - 1; j < len; j += step) {
result += s[j-dis] ? s[j - dis] : "";
result += s[j+dis]?s[j+dis]: "";
}
}else if(i == 0 || i == numRows-1){
j=i;
while(j<len - numRows + 1){
result += s[j];
j+=step;
}
}
}
return result;
};
var convert = function (s, numRows) {
if (numRows == 1) {
return s;
}
var len = s.length;
var step = numRows + (numRows - 2);
var i,j, result = "";
for(i=0; i<numRows; i++){
if(i>0 && i<numRows-1){
for (j=0; j+i < len; j += step) {
result += s[j + i];
if(j+step-i < len){
result += s[j + step - i];
}
}
}else if(i == 0 || i == numRows-1){
j=i;
while(j<len){
result += s[j];
j+=step;
}
}
}
return result;
};
参考链接: juejin.cn/post/684490…