将一个给定字符串依据给定的行数,以从上往下、从左到右进行 Z 字形排列。
比方输出字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下:
L C I RE T O E S I I GE D H N
之后,你的输入须要从左往右逐行读取,产生出一个新的字符串,比方:"LCIRETOESIIGEDHN"。
思路:
这道题实际上就是实现字符串的蛇形排列,达到了最大行数之后,就须要折头。所以对每行设置一个byte类型的数组,设置变量a实现达到n行后的转换,判断条件为减少了n-1次。因为第一次i=0也能被n-1整除,也会产生一次a的变换,所以设置a的值为-1.
tip:因为判断为n-1次的整除,如果numRows为1会呈现除0的状况,并且numRows=1不须要进行变换,所以一开始须要进行判断。
func convert(s string, numRows int) string { if(numRows == 1){ return s } chars := make([][]byte,numRows) ans := make([]byte,0) n := len(s) j := 0 a := -1 for i :=0;i<n;i++{ chars[j] = append(chars[j],s[i]) if(i % (numRows-1) == 0){ a = -a } j =j+a } for i:=0;i<numRows;i++{ ans = append(ans,chars[i]...) } return string(ans)}
运行后果如下: