力扣第54题

一、题目:54. 螺旋矩阵
螺旋矩阵
二、题目解析:

题目解析:维护一个上下左右边界,每次循环遍历矩阵最外层的边界,同时遍历结束,需要将边界向内缩小一圈,如果相对的两个边界相交,说明遍历完成,直接返回。
解题步骤:

  1. 若数组为空,直接返回答案
  2. 赋值上下左右边界
  3. 循环遍历 while(true)
    3.1从左向右开始遍历直到最右,重新设定上边界,若上边界大于下边界,则遍历完成。
    3.2从上向下开始遍历直到最下,重新设定右边界,若右边界小于左边界,则遍历完成。
    3.3从右向左开始遍历直到最左,重新设定下边界,若下边界小于上边界,则遍历完成。
    3.4从下向上开始遍历直到最上,重新设定左边界,若左边界大于右边界,则遍历完成。

图示帮助理解:
螺旋矩阵

三、代码如下:

public List spiralOrder(int[][] arr){
        List result = new ArrayList();
        //若数组为空,直接返回答案
        if(arr.length == 0){
            return result;
        }
        //赋值上下左右边界
        int up = 0;
        int down = arr.length-1;
        int left = 0;
        int right = arr[0].length-1;

        while (true){
            
            //从左向右开始遍历直到最右,重新设定上边界,若上边界大于下边界,则遍历完成。
            for (int i = left; i <=right ; i++) result.add(arr[up][i]);
            if(++up>down) break;
            
            //从上向下开始遍历直到最下,重新设定右边界,若右边界小于左边界,则遍历完成。
            for (int i = up; i <=down ; i++) result.add(arr[i][right]);
            if(--right<left) break;
            
            //从右向左开始遍历直到最左,重新设定下边界,若下边界小于上边界,则遍历完成。
            for (int i = right; i >=left; i--) result.add(arr[down][i]);
            if (--down<up) break;
            
            //从下向上开始遍历直到最上,重新设定左边界,若左边界大于右边界,则遍历完成。
            for (int i = down;i>=up;i--) result.add(arr[i][left]);
            if(++left>right) break;
            
        }
        return result;
    }

四、测试
螺旋矩阵
五、结束

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Run,boy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值