分析题目:
解题思路:
可以定义一个字符串用来保存结果,当遇到目标字符就利用string的+=来保存结果,所以我们只需知道需要保存的字符的顺序和位置即可
下面找规律按照①~④推得来:
class Solution {
public:
string convert(string s, int numRows) {
//处理边界情况【处理第一行时会死循环,报超出时间限制】
if (numRows == 1) return s;
string ret;//保存结果的字符串
//1、处理第一行
int d = 2 * numRows - 2, n = s.size();
for (int i = 0; i < n; i += d) ret += s[i];
//2、处理中间行
for (int k = 1; k < numRows - 1; k++)//循环中间的每一行
{
for (int i = k, j = d - k; i < n || j < n; i += d, j += d)
{ //两个元素哪个没走到头就加哪个
if (i < n) ret += s[i];
if (j < n) ret += s[j];
}
}
//3、处理最后一行
for (int i = numRows - 1; i < n; i += d) ret += s[i];
return ret;
}
};