zoukankan      html  css  js  c++  java
  • 6. 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 s, int numRows);

    Example 1:

    Input: s = "PAYPALISHIRING", numRows = 3
    Output: "PAHNAPLSIIGYIR"
    

    Example 2:

    Input: s = "PAYPALISHIRING", numRows = 4
    Output: "PINALSIGYAHRPI"
    Explanation:
    
    P     I    N
    A   L S  I G
    Y A   H R
    P     I

    解题思路:

    这道题直接从字符串找位置有点麻烦,我们可以用二维数组存储zigzag模式,然后从中读取字符并加入到新的字符串中。

    直接找位置:参见Grandyang

    代码:

    #define UP 1
    #define DOWN 0
    class Solution {
    public:
        string convert(string s, int numRows) {
            if(numRows == 1)
                return s;
            int idx = 0;
            int row = 0;
            int direction = 1;
            vector<vector<char>> zigzag(numRows);
            while(idx < s.size()){
                zigzag[row].push_back(s[idx++]);
                if(row == (numRows-1) || row == 0)
                    direction ^= 1;
                if(direction == UP){
                    row--;
                }else if(direction == DOWN){
                    row++;
                }
            }
            string ret;
            for(int i = 0; i < numRows; i++){
                for(char c: zigzag[i]){
                    ret.push_back(c);
                }
            }
            return ret;
        }
    };

    直接找位置:

    class Solution {
    public:
        string convert(string s, int nRows) {
            if (nRows <= 1) return s;
            string res = "";
            int size = 2 * nRows - 2;
            for (int i = 0; i < nRows; ++i) {
                for (int j = i; j < s.size(); j += size) {
                    res += s[j];
                    int tmp = j + size - 2 * i;
                    if (i != 0 && i != nRows - 1 && tmp < s.size()) res += s[tmp];
                }
            }
            return res;
        }
    };
  • 相关阅读:
    Mysql任务调度
    使用 IntraWeb (18)
    使用 IntraWeb (17)
    替盛大代发的招聘启示
    使用 IntraWeb (16)
    使用 IntraWeb (15)
    使用 IntraWeb (14)
    使用 IntraWeb (13)
    使用 IntraWeb (12)
    使用 IntraWeb (11)
  • 原文地址:https://www.cnblogs.com/yaoyudadudu/p/9219416.html
Copyright © 2011-2022 走看看