根据移动的思路来建立模型
首先这里的z字形其实就是N字形,那么就按照移动的思路来构造解答:
- 每行取一个元素然后下移一行继续存储,然后这样上下移动。要求按行输出那么就创建二维数组来存储第几行与此行的元素。
- 源字符串一次读一个然后下移或上移一行继续输出字符,那么根据这个思路设置一个变量控制数组的变化,以数组仿照真实移动来存储元素。
class Solution {
public:
string convert(string s, int numRows) {
if (numRows == 1)return s;
vector<string> row(min(numRows, int(s.size())));
bool goingDown = false;
int currow = 0;
for (auto c : s) {
row[currow] += c;
if (currow == 0 || currow == numRows - 1) goingDown = !goingDown;
currow += goingDown ? 1 : -1;
}
string ret;
for (auto c : row)
ret += c;
return ret;
}
};