0%

leetcode 6 z字形变换

题意有些难理解 需要结合样例来理解 当然很直观的思路就是先这么排布开直接按照公式一行行的拼凑结果字符串
我一开始也是这么想的…看了官方的思路发现还是自己太蠢 实际上这很像一个上下来回扫描的过程 给的字符串逐个向后 填充的字符串来回扫描即可

ps:要注意给的列是1的情况 一开始想的好好的判断总在这里出问题…

通过代码

++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/*
* @lc app=leetcode.cn id=6 lang=cpp
*
* [6] Z 字形变换
*/
#include<string>
using namespace std;
// @lc code=start
class Solution {
public:
string convert(string s, int numRows) {
if(numRows==1){
return s;
}
string *res=new string[numRows];
int index=0,curlin=0,dir=0;
while(index<s.length()){
res[curlin]+=s[index++];
if(dir){
--curlin;
if(curlin==0){
dir=0;
}
}
else{
++curlin;
if(curlin==numRows-1){
dir=1;
}
}
}
string ans;
for(int i=0;i<numRows;++i){
ans+=res[i];
}
return ans;
}
};
// @lc code=end