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

解题思路

根据题目的意思,得到创建一个字符串数组,数组大小为numRows。 之后遍历字符串,将每一个字符加到数组中的一个字符串的末尾。

代码如下

func convert(s string, numRows int) string {
    if numRows == 1 {
        return s
    }
    
    var str []string
    for i := 0; i < numRows; i++ {
        str = append(str, "")
    }
    n := 0
    flag := 1
    
    for i := 0; i < len(s); i++ {
        str[n] += fmt.Sprintf("%c", s[i])
        if n + flag >= numRows {
            flag = -1
        } else if n + flag < 0 {
            flag = 1
        }
        n += flag
    }
    var ret string
    for i := 0; i < numRows; i++ {
        ret += str[i]
    }
    return ret
}

你可能感兴趣的:(ZigZag Conversion)