通过观察规律可以发现每一个处于满列的元素与一下一个处于满列的元素(同一行)
相差固定的距离,该距离为(numsRows-1)*2。
比如输入字符串为 "LEETCODEISHIRING"
行数为 3 时,排列如下:L在原字符串中下标
为0,同行下一个满列字符是‘C’,在原字符串中下标为4.
对于满列之间的元素发现规律为:该元素在原字符串下标=同行的下一满列元素下标-2*当前行i的值。
例如图中第二行第一个中间字符是'T',在原字符串中下标为3,同行的下一满列元素是'O',在原字符串
中下标为5.
其中i代表第i行。
对于numsRows为其他情况也符合
class Solution {
public:
string convert(string s, int numRows) {
string ans;
int i,k,j,l;
if(numRows<2)
return s;
l=s.size();
for(i=0;i<l&&i<numRows;i++){//有可能字符串长度小于numRows
k=i;
while(k<l){
ans+=s[k];
k+=(numRows-1)*2;
if(i>0&&i<numRows-1){//不是第一行和最后一行才有中间字符
if(k-2*i<l)//检查是否越界
ans+=s[k-2*i];
}
}
}
return ans;
}
};