zoukankan      html  css  js  c++  java
  • [LeetCode] 54. Spiral Matrix

    Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.

    Example 1:

    Input:
    [
     [ 1, 2, 3 ],
     [ 4, 5, 6 ],
     [ 7, 8, 9 ]
    ]
    Output: [1,2,3,6,9,8,7,4,5]
    

    Example 2:

    Input:
    [
      [1, 2, 3, 4],
      [5, 6, 7, 8],
      [9,10,11,12]
    ]
    Output: [1,2,3,4,8,12,11,10,9,5,6,7]
    
     
    题意:螺旋矩阵,按螺旋的方式打印
    有的题也叫蛇形矩阵,题本身不难,就是遍历,和越界问题。
    主要考验的是耐心和细心
    class Solution {
        public List<Integer> spiralOrder(int[][] matrix) {
            int n = matrix.length;
            if (n == 0)
                return new ArrayList<>();
            int m = matrix[0].length;
            if (m == 0)
                return new ArrayList<>();
            List<Integer> res = new ArrayList<>(m * n);
            int k = 0;
            int i = 0;
            int j = 0;
            boolean left = true;
            boolean down = false;
            boolean up = false;
            boolean right = false;
            int sum = m * n;
            int upn = -1;
            int upm = -1;
            while (k <sum) {
                res.add(matrix[i][j]);
                k ++;
                if (left) {
                    j ++;
                    if (j == m) {
                        j --;
                        i ++;
                        left = !left;
                        down = !down;
                        upn ++;
                    }
                } else if (down) {
                    i ++;
                    if (i == n) {
                        i --;
                        j --;
                        down = !down;
                        right = !right;
                        m --;
                    }
                } else if (right) {
                    j --;
                    if (j == upm) {
                        j ++;
                        i --;
                        right = !right;
                        up = !up;
                        n --;
                    }
                } else if (up) {
                    i --;
                    if (i == upn) {
                        i++;
                        j++;
                        up = !up;
                        left = !left;
                        upm ++;
                    }
                }
            }
            return res;
        }
    }
  • 相关阅读:
    【Web__Cookie】常规使用
    【MVC__ExceptionFilter】全局异常处理
    【 自定义友好错误页 】
    【前端__iframe】web页面框架的使用相关
    【JS__UEditor】富文本编辑器的使用
    简单五子棋,没有电脑AI
    C# 打印倒三角
    C# 抽象类
    递归算法输出数列的前N个数
    case when then else end 累加
  • 原文地址:https://www.cnblogs.com/Moriarty-cx/p/9943203.html
Copyright © 2011-2022 走看看