Golang Z型变换

题目

Golang 实现,将一个给定 字符串 根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:

L C I R E T O E S I I G E D H N

之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。请你实现这个将字符串进行指定行数变换的 函数

string convert(string s, int numRows);

示例1

输入: s = "LEETCODEISHIRING", numRows = 3 输出: "LCIRETOESIIGEDHN"

示例2

输入: s = "LEETCODEISHIRING", numRows = 4 输出: "LDREOEIIECIHNTSG" 解释: L D R E O E I I E C I H N T S G

代码具体实现

package main import ( "fmt" ) func convert(s string, numRows int) string { if numRows == 1 { return s } var res string step := 2*numRows -2 rowStep := step for i := 0; i < numRows ; i++ { colStep := step - rowStep for move := i ; move < len(s); move = move + colStep{ if colStep != step { colStep = step - colStep } res = res + string(s[move]) } if rowStep == 2 { rowStep = step } else { rowStep = rowStep - 2 } } return res } func main() { fmt.Println("嗨客网(www.haicoder.net)") fmt.Println(convert("LEETCODEISHIRING", 3)) fmt.Println(convert("LEETCODEISHIRING", 4)) }

程序运行后,控制台输出如下:

06_golang Z型变换.png

输入了两组测试用例,得出了正确答案。