• 力扣(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 }

  • 相关阅读:
    二叉树重建leetcode
    leetcode 字符串
    leetcode first missing positive,覆盖区间
    leetcode 较难题
    Linq分页
    Linq 数据库通用的操作类
    .Net3.5扩展方法实现对象JSON序列化
    js 判断输入内容(主要针对汉字)的字节长度
    div 内table 居中
    Linq增、删、改、查
  • 原文地址:https://www.cnblogs.com/pgzhanglin/p/13347162.html
Copyright © 2020-2023  润新知