代码拉取完成,页面将自动刷新
package main
// 6. N 字形变换
// 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。
// 比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:
// P A H N
// A P L S I I G
// Y I R
// 之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。
func convert(s string, numRows int) string {
matrix, down, up := make([][]byte, numRows), 0, numRows-2 // 0是第一行,numRows-2 = numRows-1-1 是倒数第二行
for i := 0; i < len(s); {
if down != numRows { // 还没有到最后一行,说明向下走
matrix[down] = append(matrix[down], s[i])
down++
i++
} else if up > 0 { // down == numRows,已经走到了最后一行,需要往上走,直到up == 0
matrix[up] = append(matrix[up], s[i])
up--
i++
} else { // down == numRows && up == 0 说明down和up分别走到了第一行和最后一行,这时需要交换二者的初始值
up = numRows - 2
down = 0
}
}
ans := make([]byte, 0, len(s)) // 初始长度为0,否则会有零值占位符
for _, row := range matrix {
for _, item := range row {
ans = append(ans, item)
}
}
return string(ans)
}
// 模拟题,不涉及算法
// 用一个二维数组,保存z形的字母
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。