LeetCode 6. ZigZag Conversion
原题链接
简单
作者:
YC.
,
2021-03-07 17:19:01
,
所有人可见
,
阅读 334
class Solution {
public:
string convert(string s, int numRows) {
string res = "";
if (s.length() <= numRows || numRows == 1) {
return s;
}
// 1、建立一个多维vector,按照输入顺序存储字符
int rows = numRows;
int col = s.length();
vector<vector<char>> arry(rows, vector<char>(col, '0'));
// 2、填充arry,竖列填充。不妨用i,j表示当前行和列;
int i = 0;
int j = 0;
int cur = 0; // 当前填充的字符
while (cur < col) {
// 3、竖列填充,一直向下。列数不变,行数递增
while (i < rows && cur < col) {
arry[i][j] = s[cur];
// cout<<i<<"--"<<j<<arry[i][j]<<endl;
cur++;
i ++;
}
i --; // 因此为此时在rows行
// 4、逆向填充;行数递减,列数递增
while (i > 0 && cur < col) {
i --;
j ++;
arry[i][j] = s[cur];
// cout<<i<<"**"<<j<<arry[i][j]<<endl;
cur++;
}
i ++;
}
// 5、读取arry
for (const auto& vecCh : arry) {
for (const auto & ch : vecCh) {
if (ch != '0') {
res += ch;
}
}
}
return res;
}
};