力扣(LeetCode)试题6-Z字形变换 C++代码
这周课题组比较忙,牺牲了练题时间,该打该打。。。
中等题型,对于我还是挺难的 ಥ﹏ಥ ,不得不从答案找思路,这道题对于我的难点在于一次性生成numRows个容器/字符串
对于vector<>数据类型不是很熟悉,只好进行了遍历、拼接等操作,遍历了好几次,时间复杂度估计有点高,之后熟悉vector操作后再来改进。第一版代码如下:
1 #include <iostream>
2 #include <vector>
3 #include <algorithm>
4
5 using namespace std;
6
7 class Solution
8 {
9 public:
10 string convert(string s, int numRows)
11 {
12 if (numRows == 0) return "数据不合法";
13 {
14 if (numRows == 1 || s == "") return s;
15 else
16 {
17 int rows = min(numRows, int(s.size()));
18 //一次生成rows个string类型的容器
19 vector<string> str(rows);
20 string result = "";
21 int flag = -1;//控制步长的方向,+1还是-1
22 int count = 0;//分配器,若为0或者rows-1,则反向
23
24 for (int i = 0; i < s.length(); i++)
25 {
26 if (count == 0 || count == rows - 1)
27 {
28 flag = -flag;
29 }
30 str[count].push_back(s[i]);//将第i个值存入str[count]容器中
31 count += flag;
32 }
33
34 int j = 1;//指向str[j]容器,依次取出字符,并拼接
35 while (j < rows)
36 {
37 for (int k = 0; k < str[j].size(); k++)
38 {
39 str[0].push_back(str[j][k]);
40 }
41 j += 1;
42 }
43
44
45 for (int q = 0; q < str[0].size(); q++)
46 {
47 result += str[0][q];
48 }
49 return result;
50 }
51 }
52 }
53 };
54
55 int main()
56 {
57 Solution sol;
58 string s = "";
59 int n = 0;
60 string result;
61 result = sol.convert(s, n);
62 for (int i = 0; i < result.size(); i++)
63 cout << result[i];
64
65 cout << endl;
66
67 int u;
68 cin >> u;
69
70 return 0;
71 }