package main func convert(s string, numRows int) string { n := len(s) if n < 3 || numRows == 1 { return s } cycle := numRows*2 - 2 arr := make([][]rune, numRows) for i, v := range s { idx := i % cycle if idx < numRows { arr[idx] = append(arr[idx], v) } else { arr[(numRows-1)*2-idx] = append(arr[(numRows-1)*2-idx], v) } } res := make([]rune, 0) for _, v := range arr { res = append(res, v...) } return string(res) } /* func main() { fmt.Println(convert("PAYPALISHIRING", 3)) fmt.Println(convert("ABCDE", 4)) fmt.Println("PAHNAPLSIIGYIR") } */