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
思路:
1、建立一个字符串数组,其索引值便是其行号;
2、其字符串数组的每个元素便是其 zig zag 的每行结果;
3、将字符串数组中的所有元素拼接成字符串便是要返回的结果
package main
import (
"fmt"
)
func main() {
s := "PAYPALISHIRING"
ret := convert(s,4)
fmt.Println(ret)
}
func convert(s string, numRows int) string {
if (numRows < 2){
return s
}
var ret [1000]string
index := 1
row := 0
for i := 0; i < len(s); i++ {
if (row == -1){
index = 1
row += index
}
if (row == numRows){
index = -1
row = numRows - 2
}
if ((row == 0) && (index == -1)){
index = 1
}
ret[row] = ret[row] + string(s[i])
row += index
}
var result string
for i :=0; i < numRows; i++ {
result = result + ret[i]
}
return result
}