用LeetCode复习Java基本语法(题号54)

Hello Java.

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

示例:
输入:
[
 [ 1, 2, 3 ],
 [ 4, 5, 6 ],
 [ 7, 8, 9 ]
]

输出:[1,2,3,6,9,8,7,4,5]

示例:
输入:
[
 [1, 2, 3, 4],
 [5, 6, 7, 8],
 [9,10,11,12]
]

输出:[1,2,3,4,8,12,11,10,9,5,6,7]

题目链接:
https://leetcode-cn.com/problems/spiral-matrix/

代码:

class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> result = new ArrayList<>();
        if (matrix.length == 0) return result; /* 当参数matrix中内容为空时 */
        int t = 0, b = matrix.length - 1, l = 0, r = matrix[0].length - 1; /* 上下左右边界值 */
        while (true) {
            for (int i = l; i <= r; i++) result.add(matrix[t][i]); /* 向右移动 */
            if (++ t > b) break; /* 重新设定上边界 */
            for (int i = t; i <= b; i++) result.add(matrix[i][r]); /* 向下移动 */
            if (-- r < l) break; /* 重新设定右边界 */
            for (int i = r; i >= l; i--) result.add(matrix[b][i]); /* 向左移动 */
            if (-- b < t) break; /* 重新设定下边界 */
            for (int i = b; i >= t; i--) result.add(matrix[i][l]); /* 向上移动 */
            if (++ l > r) break; /* 重新设定左边界 */
        }
        return result;
    }
}

待续ヾ(=・ω・=)o

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值