NOTE

螺旋矩阵

按顺时针螺旋顺序遍历矩阵。

Data Structures & Algorithms创建于 更新于 约 1 分钟读完historical

这是历史学习笔记,可能存在过时或不完整的理解。

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--
    }
}

4. 参考

54. 螺旋矩阵 - 力扣(LeetCode)

讨论

使用 GitHub 账号参与讨论,评论会保存在 GitHub Issues 中。在 GitHub 查看