题目描述
思路解析
看到这道题其实一开始我是一脸懵的
后面才慢慢清楚思路
-
没有用数组以及其他工具,依次找到第一行、第2行…第n行所取S中的字符,存入ans中,返回ans即可。
-
找到下标分布的规律:
-
第一行和最后一行取出字符串S的下标间隔为(numRows*2-2),因为中间有(numRows-1)行,而每行中有2个数字;
-
中间的每一行间隔有下三角部分和上三角部分,间隔分别为(numRows-row-1) * 2、row * 2;
题解
class Solution {
public:
string convert(string s, int numRows) {
int length=s.length();
if(numRows>=length||numRows<2) return s;
string ans;
for( int row=0;row<numRows;row++){
int i=row;
if(row==0||row==numRows-1){
while(i<length){
ans+=s[i];
i+=numRows*2-2;
}
}
else{
while(i<length){
ans+=s[i];
i+=(numRows-row-1)*2;
if(i<length){
ans+=s[i];
i+=row*2;
}
}
}
}
return ans;
}
};