题目链接:https://leetcode.com/problems/zigzag-conversion/
Runtimes:40ms
1、问题
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”
Write the code that will take a string and make this conversion given a number of rows:
string convert(string text, int nRows);
convert(“PAYPALISHIRING”, 3) should return “PAHNAPLSIIGYIR”.
2、分析
nRows = 1时,就是原字符串;nRows = 2时,就是两行的字符串,原字符每两个字符串同行;当nRows = 3时,1行的字符串和3行的字符串都是原字符串每隔4个一行,2行的字符串是原字符串每隔2个一行;当nRows = n时,1行的字符串和n行的字符串,原字符每隔(n - 2) * 2 + 2(设为N)个字符串同行,中间第i行是原字符串一次隔N-2i和一次隔2i个字符串同行。以此类推。
3、小结
有规律的变化,可以看出来。
4、实现
class Solution {
public:
string convert(string s, int nRows) {
if ("" == s || nRows == 1)
return s;
int n = (nRows - 2) * 2 + 2;
string str = "";
for (int i = 0, j = n; i < nRows; i++, j -= 2)
{
int index = i;
bool isFirst = true;
while (index < s.length())
{
str = str + s[index];
if (n == j || j == 0)
{
j = n;
index += j;
}
else{
if (isFirst)
{
index += j;
isFirst = false;
}
else{
index += (n - j);
isFirst = true;
}
}
}
}
return str;
}
};
5、反思
看样子还可以更快的。