zoukankan      html  css  js  c++  java
  • [Leetcode] ZigZag Conversion

    The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)

    P   A   H   N
    A P L S I I G
    Y   I   R
    

    And then read line by line: "PAHNAPLSIIGYIR"

    Write the code that will take a string and make this conversion given a number of rows:

    string convert(string text, int nRows);

    convert("PAYPALISHIRING", 3) should return "PAHNAPLSIIGYIR".

    注意如果用push_back的话会超内存,因为每次push_back后如果空间不够则新空间会是原来的两倍,为了避免这种情况还是直接定义长度为len的字符串吧。题目根本就没说清楚嘛, 下面是n=4时的结果:

    P     I     N
    A   L S   I G
    Y A   H R
    P I

     1 class Solution {
     2 public:
     3     string convert(string s, int nRows) {
     4         int len = s.length();
     5         if (len <= nRows || nRows == 1) return s;
     6         int steps;
     7         string res;
     8         res.resize(len);
     9         int idx = 0;
    10         for (int i = 0; i < nRows; ++i) {
    11             if (i == nRows - 1) steps = 2 * (nRows - 1);
    12             else steps = 2 * (nRows - i - 1);
    13             
    14             if (i == 0 || i == nRows - 1) {
    15                 for (int j = i; j < len; j += steps) {
    16                     res[idx] = s[j];
    17                     ++idx;
    18                 }
    19             } else {
    20                 bool flag = true;
    21                 for (int j = i; j < len;) {
    22                     res[idx] = s[j];
    23                     ++idx;
    24                     if (flag) j += steps;
    25                     else j += (2 * (nRows - 1) - steps);
    26                     flag = !flag;
    27                 }
    28             }
    29         }
    30         return res;
    31     }
    32 };
  • 相关阅读:
    最小生成树模板(Prim+Kruskal)
    最短路模板(Dij+Floyd)
    LeetCode双周赛#33 题解
    CSS3 学习笔记(中)
    拓扑排序小测试
    串和矩阵压缩的小测试
    树的相关小测试 题解
    Leetcode 周赛#202 题解
    HTML5 学习笔记
    Leetcode 双周赛#32 题解
  • 原文地址:https://www.cnblogs.com/easonliu/p/3695034.html
Copyright © 2011-2022 走看看