题目传送门
链接:https://leetcode-cn.com/problems/zigzag-conversion/
题干
题解
自己的方法是先实现对应的Z字形数组,再对逐个字符进行连接。比较复杂,调了很长时间
看到了题解的方法,才知道可以简单很多,刷完题还是要及时看题解
其实不需要开一个char数组,可以开一个string数组,每次把当前字符加到当前的行即可
最后答案可以直接逐行相加
Code
自己的方法:
class Solution {
public:
char arr[1005][1005];
string str;
string convert(string s, int numRows) {
int x = 0, y = 0;
int n = s.size(), idx = 0;
if (numRows == 1)
return s;
while (idx < n) {
while (x + 1 < numRows && idx < n) {
arr[x++][y] = s[idx++];
}
while (x - 1 >= 0 && idx < n) {
arr[x--][y++] = s[idx++];
}
}
for (int i = 0; i < numRows; i++) {
// 因为第 y 列有可能已经有字符,所以需要访问
for (int j = 0; j <= y; j++) {
if (arr[i][j] != 0) {
str += arr[i][j];
}
}
}
return str;
}
};
题解的方法:
class Solution {
public:
string str;
string convert(string s, int numRows) {
if (numRows == 1)
return s;
vector<string> rows(min(numRows, int(s.size())));
bool goDown = false;
int curRow = 0;
for (char c : s) {
rows[curRow] += c;
if (curRow == 0 || curRow == numRows - 1) goDown = !goDown;
curRow += goDown ? 1 : -1;
}
for (int i = 0; i < numRows; i++) {
str += rows[i];
}
return str;
}
};