zoukankan      html  css  js  c++  java
  • LeetCode:螺旋矩阵【54】

    LeetCode:螺旋矩阵【54】

    题目描述

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

    示例 1:

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

    示例 2:

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

    题目分析

      这道题简直丧心病狂☺!我们采用的方式是一圈一圈打印

      答案将是从第一个外层按顺时针顺序排列的所有元素,然后是第二个外层的元素,依此类推

      我们首先定义四个元素,r1,r2,c1,c2,这将框定一个范围,我们顺时针打印这个范围边上的值,每次打印以后再次缩小框

      好的问题来了?

      1.要打印几个框?

        times=Math.min(长,宽)%2==0?Math.min(长,宽)/2:Math.min(长,宽)/2+1;

      2.顺时针打印的横纵坐标变化规律?如图所示有颜色是要打印的框

      

      3、吐槽一下这个题,简直恶心。

    Java题解

    class Solution {
        public List<Integer> spiralOrder(int[][] matrix) {
            List<Integer> ans = new ArrayList<>();
            int m = matrix.length; //行
            if (m == 0)
                return ans;
            int n = matrix[0].length;//列
            int c1  =  0;
            int c2  = n-1;
            int r1  = 0;
            int r2 = m-1;
            int times = Math.min(m,n)%2==0?Math.min(m,n)/2:Math.min(m,n)/2+1;
            for(int i=0;i<times;i++)
            {
                 for (int c = c1; c <= c2; c++) ans.add(matrix[r1][c]);
                for (int r = r1 + 1; r <= r2; r++) ans.add(matrix[r][c2]);
                if (r1 < r2 && c1 < c2) {
                    for (int c = c2 - 1; c > c1; c--) ans.add(matrix[r2][c]);
                    for (int r = r2; r > r1; r--) ans.add(matrix[r][c1]);
                }
                r1++;
                r2--;
                c1++;
                c2--;
            }
    
            return ans;
        }
    }
    

      

  • 相关阅读:
    TypeError: 'encoding' is an invalid keyword argument for this function 解决Python 2.7
    valid-palindrome leetcode C++
    valid-palindrome leetcode C++
    word-break-ii leetcode C++
    word-break-ii leetcode C++
    word-break leetcoder C++
    word-break leetcoder C++
    word-ladder leetcoder C++
    word-ladder leetcoder C++
    triangle leetcode C++
  • 原文地址:https://www.cnblogs.com/MrSaver/p/9812944.html
Copyright © 2011-2022 走看看