【Leetcode】54. 螺旋矩阵

54. 螺旋矩阵

题目

54. 螺旋矩阵
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
在这里插入图片描述

func spiralOrder(matrix [][]int) []int {
    // 结果切片
    ans := []int{}
    // 矩阵长宽
    n, m := len(matrix), len(matrix[0])
    // 上下左右边界
    t, b, l, r := 0, n-1, 0, m-1
    // 元素个数
    cnt := 1
    // 获取n*m个元素
    for cnt <= n*m {
        // 从左到右获取上边界的元素
        for i := l; i <= r; i++ {
            ans = append(ans, matrix[t][i])
            cnt++
        }
        // 上边界下移
        t++
        // 因为矩阵可能不为正方形,因此可能会边界重叠或越界,因此需要判断,否则可能会导致重复添加元素
        // 如果上边界越过了下边界
        if t > b {
            break
        }
        // 右边界从上到下
        for i := t; i <= b; i++ {
            ans = append(ans, matrix[i][r])
            cnt++
        }
        // 右边界左移
        r--
        // 如果右边界越过了左边界
        if r < l {
            break
        }
        // 下边界从右到左
        for i := r; i >= l; i-- {
            ans = append(ans, matrix[b][i])
            cnt++
        }
        // 下边界上移
        b--
        // 如果下边界越过上边界
        if b < t {
            break
        }
        // 左边界从下到上
        for i := b; i >= t; i-- {
            ans = append(ans, matrix[i][l])
            cnt++
        }
        // 左边界右移
        l++
        // 如果左边界越过了右边界
        if l > r {
            break
        }
    } 
    return ans
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值