具体解决思路参考博客【LeetCode】ZigZag Conversion 解题报告
The string “PAYPALISHIRING” is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)
P A H N
A P L S I I G
Y I R
And then read line by line: “PAHNAPLSIIGYIR”
string convert(string text, int nRows);
我们可以看到第一行和最后一行PAHN,YIR下标分别为0 4 8 12 2 6 10,每列第一个下标间隔是4,其实就是2*NRows - 2的规律。
然后非首行和末行的话,还要再找中间的。
class Solution {
public:
string convert(string s, int numRows) {
if (s.length()==0||numRows<2)
return s;
int lag = 2*numRows -2;
string res="";
for (int i=0;i<numRows;i++)
{
for (int j=i;j<s.length();j += lag)
{
res = res+s[j];
if (i>0 && i<numRows-1)
{
int t = j+lag - 2*i;
if (t<s.length())
{
res = res+s[t];
}
}
}
}
return res;
}
};