• LeetCode 54. Spiral Matrix


    LeetCode 54. Spiral Matrix (螺旋矩阵)

    题目

    链接

    https://leetcode-cn.com/problems/spiral-matrix/

    问题描述

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

    示例

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

    提示

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

    思路

    就一圈一圈的,只需要设置好边界值即可,我用tag来避免产生死循环。

    复杂度分析

    时间复杂度 O(n*m)
    空间复杂度 O(n*m)
    

    代码

    Java

       public List<Integer> spiralOrder(int[][] matrix) {
            int n = matrix.length;
            int m = matrix[0].length;
            List<Integer> ans = new ArrayList<>();
            int up = 0;
            int down = n - 1;
            int left = 0;
            int right = m - 1;
            int x = 0;
            int y = -1;
            int turn = 0;
            int tag = 0;
            for (int i = 1; i <= n * m && tag != 4; i++) {
                if (turn == 0) {
                    if (y < right) {
                        y++;
                        ans.add(matrix[x][y]);
                        tag = 0;
                    } else {
                        up++;
                        i--;
                        turn = 1;
                        tag++;
                    }
                } else if (turn == 1) {
                    if (x < down) {
                        x++;
                        ans.add(matrix[x][y]);
                        tag = 0;
                    } else {
                        right--;
                        i--;
                        turn = 2;
                        tag++;
                    }
                } else if (turn == 2) {
                    if (y > left) {
                        y--;
                        ans.add(matrix[x][y]);
                        tag = 0;
                    } else {
                        down--;
                        i--;
                        turn = 3;
                        tag++;
                    }
                } else {
                    if (x > up) {
                        x--;
                        ans.add(matrix[x][y]);
                        tag = 0;
                    } else {
                        left++;
                        i--;
                        turn = 0;
                        tag++;
                    }
                }
            }
            return ans;
        }
    
  • 相关阅读:
    linux
    ansible
    语法糖
    jupyter login
    hadoop patch
    ganglia
    unixbench安装使用
    linux使用FIO测试磁盘的iops
    cpu事实负载使用top命令
    phoronix-test-suite测试云服务器
  • 原文地址:https://www.cnblogs.com/blogxjc/p/16204645.html
Copyright © 2020-2023  润新知