|
@@ -0,0 +1,87 @@
|
|
|
|
+package main
|
|
|
|
+
|
|
|
|
+import "fmt"
|
|
|
|
+
|
|
|
|
+func main() {
|
|
|
|
+ var s string
|
|
|
|
+ var numRows int
|
|
|
|
+
|
|
|
|
+ s = "A"
|
|
|
|
+ numRows = 1
|
|
|
|
+ fmt.Println(convert(s, numRows))
|
|
|
|
+
|
|
|
|
+ s = "AB"
|
|
|
|
+ numRows = 1
|
|
|
|
+ fmt.Println(convert(s, numRows))
|
|
|
|
+
|
|
|
|
+ s = "ABC"
|
|
|
|
+ numRows = 2
|
|
|
|
+ fmt.Println(convert(s, numRows))
|
|
|
|
+
|
|
|
|
+ s = "PAYPALISHIRING"
|
|
|
|
+ numRows = 3
|
|
|
|
+ fmt.Println(convert(s, numRows))
|
|
|
|
+
|
|
|
|
+ s = "PAYPALISHIRING"
|
|
|
|
+ numRows = 4
|
|
|
|
+ fmt.Println(convert(s, numRows))
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func convert(s string, numRows int) string {
|
|
|
|
+ if numRows == 1 {
|
|
|
|
+ return s
|
|
|
|
+ }
|
|
|
|
+ var mp = make([][]string, numRows)
|
|
|
|
+ var vertical, horizontal int
|
|
|
|
+ var cursor = 0
|
|
|
|
+ var ch string
|
|
|
|
+ var strs []string
|
|
|
|
+ var isVertical = true
|
|
|
|
+ for cursor < len(s) {
|
|
|
|
+ ch = string(s[cursor])
|
|
|
|
+ if isVertical {
|
|
|
|
+ strs = mp[vertical]
|
|
|
|
+ strs = append(strs, ch)
|
|
|
|
+ mp[vertical] = strs
|
|
|
|
+ } else {
|
|
|
|
+ for i := 0; i < numRows; i++ {
|
|
|
|
+ strs = mp[i]
|
|
|
|
+ if i == vertical {
|
|
|
|
+ strs = append(strs, ch)
|
|
|
|
+ } else {
|
|
|
|
+ strs = append(strs, " ")
|
|
|
|
+ }
|
|
|
|
+ mp[i] = strs
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (horizontal)%(numRows-1) == 0 {
|
|
|
|
+ if !isVertical {
|
|
|
|
+ vertical = -1
|
|
|
|
+ }
|
|
|
|
+ isVertical = true
|
|
|
|
+ vertical++
|
|
|
|
+ } else {
|
|
|
|
+ isVertical = false
|
|
|
|
+ vertical--
|
|
|
|
+ }
|
|
|
|
+ if isVertical && vertical == numRows-1 {
|
|
|
|
+ horizontal++
|
|
|
|
+ }
|
|
|
|
+ if !isVertical {
|
|
|
|
+ horizontal++
|
|
|
|
+ }
|
|
|
|
+ cursor++
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ // print
|
|
|
|
+ var ans string
|
|
|
|
+ for i := 0; i < len(mp); i++ {
|
|
|
|
+ for j := 0; j < len(mp[i]); j++ {
|
|
|
|
+ if mp[i][j] != " " {
|
|
|
|
+ ans += mp[i][j]
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return ans
|
|
|
|
+}
|