1 Star 0 Fork 0

chintensakai/leetcode-golang

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
code6.go 1.30 KB
一键复制 编辑 原始数据 按行查看 历史
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形的字母
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/chintensakai/leetcode-golang.git
git@gitee.com:chintensakai/leetcode-golang.git
chintensakai
leetcode-golang
leetcode-golang
main

搜索帮助