个人思路总结:
按照与逐行读取 Z 字形图案相同的顺序访问字符串。
首先访问 行 0 中的所有字符,接着访问 行 1,然后 行 2,依此类推…
1、第0行的元素的下标为k*(2numRows-2)
2、第numRows-1行的元素的下标为(numRows-1)+k(2numRows-2)
3、中间第i行的元素为k(2numRows-2)+i和(k+1)(2*numRows-2)-i
(其中k代表竖列数,从0开始)
代码如下:
class Solution {
public:
string convert(string s, int numRows) {
string result;
if(numRows==1)
return s;
int len = s.size();
int cyclelen = 2*numRows-2;
for(int i=0;i<numRows;i++)
{
for(int j=0;i+j<len;j+=cyclelen)
{
result += s[i+j];
if(i!=0 && i!=numRows-1 && j+cyclelen-i<len)
result += s[j+cyclelen-i];
}
}
return result;
}
};