zoukankan      html  css  js  c++  java
  • 【LeetCode】8.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".

    首先理解题目ZigZag的意思。ZigZag Conversion即把字符串的字符按照Z字形重新排列,Z字形横过来看就是N字形。nRows=3的情况如上图所示,nRows=4应为

    0        6

    1  4    7

    2    5  8

    3        9

    而不是

    0      5

    1  4  6

    2      7

    3      8

    也就是中间应有nRows-2个数,而不是只有一个,这个一开始我理解错了。

    那么特殊情况,nRows=1时,简单,直接返回s。

    nRows=2时,

    0  2

    1  3

    还是下面这种?

    0      3

    1  2  4  

    应该是第一种。

    思路: 把s按照下标,以nRows+nRows-2为单位装入nRows个字符串数组中,然后挨个append到要输出的字符串后面即可。算法的复杂度为O(n)。

    class Solution {
    public:
        string convert(string s, int nRows) {
            // Note: The Solution object is instantiated only once and is reused by each test case.    
            if (nRows <= 1 )  
                return s;  
            string* s_array=new string[nRows];
            int n=nRows+nRows-2;
            int w=0;
            for(int i=0;i<s.length();i++){
                w=nRows-1-abs(nRows-1-i%n);
                s_array[w].push_back(s[i]); 
            }
            string str_result;  
            for (int i = 0; i < nRows; ++i)  
                str_result.append(s_array[i]);  
      
            return str_result;
        }
    };
    
  • 相关阅读:
    教你写能被舒服舒服又舒服地调用的iOS库
    无比迅速敏捷地开发iOS超精美控件
    iOS中UIlabel多行文本展示使用小结
    诸葛亮诫子书
    保留开阔的心灵空间
    iOS长按手势列表拖拽功能实现
    iOS通知使用小结
    真正的成熟
    生活的常态
    记一次LNMP 502问题的解决 (Nginx 、php、php-fpm)
  • 原文地址:https://www.cnblogs.com/guozhiguoli/p/3353410.html
Copyright © 2011-2022 走看看