NOTE
螺旋矩阵
按顺时针螺旋顺序遍历矩阵。
这是历史学习笔记,可能存在过时或不完整的理解。
1. 题目描述
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素
2. 思路
遍历一圈后缩小范围
3. 实现
func spiralOrder(matrix [][]int) []int {
if len(matrix) == 0 {
return nil
}
row := -1
col := -1
minRow := -1
minCol := -1
maxRow := len(matrix)
maxCol := len(matrix[0])
res := make([]int, 0, maxRow*maxCol)
for len(res) != cap(res) {
row++
col++
minRow++
minCol++
maxCol--
maxRow--
visit(matrix, row, col,minRow,minCol, maxRow, maxCol, &res)
}
return res
}
func visit(matrix [][]int, row int, col int, minRow int, minCol int, maxRow int, maxCol int, res*[]int) {
for col <= maxCol {
*res = append(*res, matrix[row][col])
if len(*res) == cap(*res) {
return
}
col++
}
col--
row++
for row <= maxRow {
*res = append(*res, matrix[row][col])
if len(*res) == cap(*res) {
return
}
row++
}
row--
col--
for col >= minCol {
*res = append(*res, matrix[row][col])
if len(*res) == cap(*res) {
return
}
col--
}
col++
row--
for row > minRow {
*res = append(*res, matrix[row][col])
if len(*res) == cap(*res) {
return
}
row--
}
}
讨论
使用 GitHub 账号参与讨论,评论会保存在 GitHub Issues 中。在 GitHub 查看