zoukankan      html  css  js  c++  java
  • 6. ZigZag Conversion

    package LeetCode_6
    
    /**
     * 6. ZigZag Conversion
     * https://leetcode.com/problems/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
    
    Example 3:
    Input: s = "A", numRows = 1
    Output: "A"
    
    Constraints:
    1. 1 <= s.length <= 1000
    2. s consists of English letters (lower-case and upper-case), ',' and '.'.
    3. 1 <= numRows <= 1000
     * */
    class Solution {
        /*
        * solution: Array + StringBuilder,
        * Time complexity:O(n)(each letter access one time), Space complexity:O(n), n is length of s,
        * */
        fun convert(s: String, numRows: Int): String {
            val stringBuilders = Array(numRows) { StringBuilder() }
            val len = s.length
            var index = 0
            while (index < len) {
                var row = 0
                while (row < numRows && index < len) {
                    /*
                    * for example: PAYPALISHIRING
                    * stringBuilders[0].append(P)
                      stringBuilders[1].append(A)
                      stringBuilders[2].append(Y)
                      stringBuilders[0].append(P)
                      stringBuilders[1].append(A)
                      stringBuilders[2].append(L)
                      ....
                    * */
                    stringBuilders[row].append(s[index++])
                    row++
                }
                //diagonally upward starting from stringBuilders[numRows-2] and stop at stringBuilders[1]
                var j = numRows - 2
                while (j >= 1 && index < len) {
                    stringBuilders[j].append(s[index++])
                    j--
                }
            }
            //merge all into StringBuilder 1
            for (i in 1 until stringBuilders.size){
                stringBuilders[0].append(stringBuilders[i])
            }
            //println(stringBuilders[0].toString())
            return stringBuilders[0].toString()
        }
    }
  • 相关阅读:
    hdu 5119 Happy Matt Friends
    hdu 5128 The E-pang Palace
    hdu 5131 Song Jiang's rank list
    hdu 5135 Little Zu Chongzhi's Triangles
    hdu 5137 How Many Maos Does the Guanxi Worth
    hdu 5122 K.Bro Sorting
    Human Gene Functions
    Palindrome(最长公共子序列)
    A Simple problem
    Alignment ( 最长上升(下降)子序列 )
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/13847826.html
Copyright © 2011-2022 走看看