


题解:
其实看到这个题最开始的想法是:
用建立一个动态数组二维矩阵,再依次遍历动态数组里的字符就可以得到zigzag conversion。
而在整个过程中倒了很多次的就是关于这个题的数学表达式上,通过画图我大概制定了对应的表达式。如图。

- 当存竖着的字符时,我用的是 v[i%(numRows-1)].push_back(s[i]);
- 当存斜着的字符时,我用的是 v[numRows-1-i%(numRows-1)].push_back(s[i]);
而如何判断是竖着还是斜着呢,我用了一个flag和下标进行判断,若为竖着,flag为1,到了开始斜着的点,flag变成0.
代码:
class Solution {
public:
string convert(string s, int numRows) {
vector<int> v[numRows];
if(numRows==1) return s;
int flag=0;
for(int i=0;i<s.length();i++){
if(i%(numRows-1)==0) flag==0?flag=1:flag=0;
if(flag==1){
v[i%(numRows-1)].push_back(s[i]);
}
else{
v[numRows-1-i%(numRows-1)].push_back(s[i]);
}
}
string ans="";
for(int i=0;i<numRows;i++){
for(int j=0;j<v[i].size();j++) ans+=v[i][j];
}
return ans;
}
};

又跑去参观了一下别人的代码,思路好清晰简洁啊…佩服。
不是通过数学表达式来控制,而是通过while循环内部两个for进行接连循环,我的动态数组部分则是直接用了string数组来实现
感觉自己有时候学习的东西太复杂导致了忘记最简单纯粹的东西,其实人生也是这样吧。
本文介绍了一种实现Zigzag字符串转换的方法,通过使用动态数组存储不同路径的字符,并结合标志位判断当前字符的位置,最终按行拼接输出转换后的字符串。同时对比了简洁的循环实现方式。
533

被折叠的 条评论
为什么被折叠?



