找规律的题目了,规律从下面的数组矩阵中可以很容易找出来
把字符串的下标按题目要求排列,发现第一行是等差数列
以后每加一行在上一行的数字+1就行
然后观察斜边
我们每次可以确认每一竖的数字,斜边的数字是竖边的数字加上某个差值
对于第一个斜边的数字
5=1+4
4=2+2
#include <cstdio>
#include <iostream>
using namespace std;
class Solution {
public:
string convert(string s, int numRows) {
if(numRows>=s.size()||numRows==1)
return s;
string coString;
for (int i = 0; i < numRows; ++i) {//往下
int x = 0;//横向前进
while (2 * (numRows - 1) * x + i < s.size()) {
coString.push_back(s[2 * (numRows - 1) * x + i]);
if (i != 0 && i != numRows - 1&&2 * (numRows - 1) * x + i + 2 * (numRows - 1) - 2 * i<s.size()) {
//判断条件:非第一行和最后一行,下标不越界。
coString.push_back(s[2 * (numRows - 1) * x + i + 2 * (numRows - 1) - 2 * i]);
}
x++;
}
}
return coString;
}
};
int main() {
Solution sf;
string str = "ABCED";
cout << sf.convert(str, 4);
return 0;
}