题目描述:
将一个给定字符串 s
根据给定的行数 numRows
,以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 "PAYPALISHIRING"
行数为 3
时,排列如下:
P A H N
A P L S I I G
Y I R
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"
。
例如:
输入:s = "PAYPALISHIRING", numRows = 3
输出:"PAHNAPLSIIGYIR"
思路&代码:
从字符串的分析,逐个遍历字符串s,发现是一种左右摇摆方式将遍历来的字符串存储,摇摆的左右边界值在第一行第numRows行时候边界点进行摇摆.另外在第一行跟numRows之间,走向始终是一边倒趋势,直到到达彼岸节点,在反转回去,一直持续到字符串遍历完成位置.如此以来,利用字符串数组来存储对应的字符,最终,字符串数组编译拼接起来,就是转换后的字符串。代码如下:
func convert(s string, numRows int) string {
if numRows == 1 { // 考虑字符串传递的边界值
return s
}
sList := make([]string,len(s))
var flag bool = false
k := 0
for _,v := range s {
sList[k] += string(v)
if k == 0 || k == numRows - 1 {
flag = !flag
}
if flag {
k++
} else {
k--
}
}
sRet := ""
for _,v := range sList {
sRet += v
}
return sRet
}