标签:string idx 变换 ++ numRows int str leetcode 字形
题目传送门
链接: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;
}
};
标签:string,idx,变换,++,numRows,int,str,leetcode,字形 来源: https://blog.csdn.net/weixin_43772166/article/details/122010986
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。