Leetcode-54. 螺旋矩阵

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

示例 1:

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

示例 2:

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

提示:

  • m == matrix.length
  • n == matrix[i].length
  • 1 <= m, n <= 10
  • -100 <= matrix[i][j] <= 100

主要得设置边界,把握边界的范围。可以设置left,right表示左边界和有边界(列边界);top和bottom为上边界和下边界(行边界)。然后保证左边不超过右边;上边不超过下边。每撞一次边界,对应的范围要发生改变

代码如下:

 

class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> res = new ArrayList<>();
        int left = 0;
        int right = matrix[0].length-1;
        int top = 0;
        int bottom = matrix.length-1;

        while(left<=right&&top<=bottom){
            for(int i = left ; i <= right && top <= bottom ; i++){
                res.add(matrix[top][i]);
            }
            top++;
            for(int i =top ; i <= bottom && left <= right ; i++){
                res.add(matrix[i][right]);
            }
            right--;
            for(int i = right ; i >= left && top <= bottom ; i--){
                res.add(matrix[bottom][i]);
            }
            bottom--;
            for(int i = bottom ; i >= top && left <= right ; i--){
                res.add(matrix[i][left]);
            }
            left++;
        }
    return res;
        
    }
}

一个大佬的思路:走过的路置为0,然后拐弯的时候判断一下是不是已经走过了,如果走过了就计算一下新的方向。他的代码如下:

r, i, j, di, dj = [], 0, 0, 0, 1
if matrix != []:
    for _ in range(len(matrix) * len(matrix[0])):
        r.append(matrix[i][j])
        matrix[i][j] = 0
        if matrix[(i + di) % len(matrix)][(j + dj) % len(matrix[0])] == 0:
            di, dj = dj, -di
        i += di
        j += dj
return r

 不得不说,真的很妙!

相关推荐

  1. LeetCode 54. 螺旋矩阵

    2024-02-16 06:20:03       38 阅读
  2. Golang leetcode59 螺旋矩阵

    2024-02-16 06:20:03       51 阅读
  3. LeetCode59 螺旋矩阵 II

    2024-02-16 06:20:03       51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-16 06:20:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-16 06:20:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-16 06:20:03       82 阅读
  4. Python语言-面向对象

    2024-02-16 06:20:03       91 阅读

热门阅读

  1. mac安装openjdk

    2024-02-16 06:20:03       47 阅读
  2. python 算法之 克鲁斯卡尔算法

    2024-02-16 06:20:03       58 阅读
  3. django中的中间件

    2024-02-16 06:20:03       53 阅读
  4. 音视频高频知识点

    2024-02-16 06:20:03       55 阅读
  5. ROS-Ubuntu20.04环境安装

    2024-02-16 06:20:03       54 阅读
  6. [office] excel中排列序号的方法 #媒体#经验分享

    2024-02-16 06:20:03       48 阅读
  7. SpringMVC

    SpringMVC

    2024-02-16 06:20:03      38 阅读
  8. django-filter使用

    2024-02-16 06:20:03       51 阅读