中等-LeetCode 54. 螺旋矩阵

题目

来源:螺旋矩阵

给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。

示例

在这里插入图片描述

解题思路及代码
1. 思路

自己思考的时候:
m行,n列,第i行,第j列,
i = 0,j++ >> j = n-1,i++; >> i=m-1; j-- ; >> j=0;i-- >> i=1,j++ >> j=n-2,i++ >> i=m-2,j-- >> j=1,i-- >>…
虽然想到了可以改变m,n的大小来改变矩阵边界,竟然被困在了改变右边界和上边界。。。果然死脑筋。。。
思路:
实际上也是对矩阵进行一个遍历,只需要在每次遍历完每一行,则改变上边界或下边界值,遍历完每一列改变左边界或右边界值,直到上边界大于下边界或者左边界大于右边界,则遍历完。

2. 代码
var spiralOrder = function(matrix) {
    var arr = [];
    if (matrix.length == 0) {
        return arr;
    }
    var m = matrix.length - 1;
    var n = matrix[0].length - 1;
    var u = 0;
    var l = 0;
    while (true) {
        for (let i = l; i <= n; i++) {
            arr.push(matrix[u][i]);
        }
        u++;
        if(u > m) {
            break;
        }
        for (let i = u; i <= m; i++) {
            arr.push(matrix[i][n]);
        }
        n--;
        if (n < l) {
            break;
        }
        for (let i = n; i >= l; i--) {
            arr.push(matrix[m][i]);
        }
        m--;
        if (m < u) {
            break;
        }
        for (let i = m; i >= u; i--) {
            arr.push(matrix[i][l]);
        }
        l++;
        if (l > n) {
            break;
        }
    }
    return arr;
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值