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

    LeetCode:螺旋矩阵||【59】

    题目描述 

    给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。

    示例:

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

    题目分析

      这道题难度也是中等,是那道恶心题的衍生版,但是说实话难度小于1,且已经明示一定是正方形矩。我们直接改一下1的代码就可以了!并且效率是非常高的!

      

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

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

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

      好的问题来了?

      1.要赋值几个框?

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

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

      

    Java题解

    public class SpiralMatrixII_59 {
        public int[][] generateMatrix(int n) {
            int[][] arr = new int[n][n];
            int c1  =  0;
            int c2  = n-1;
            int r1  = 0;
            int r2 = n-1;
            int count =1 ;
            int times = Math.min(n,n)%2==0?Math.min(n,n)/2:Math.min(n,n)/2+1;
            for(int i=0;i<times;i++)
            {
                for (int c = c1; c <= c2; c++) arr[r1][c]=count++;
                for (int r = r1 + 1; r <= r2; r++) arr[r][c2]=count++;
                if (r1 < r2 && c1 < c2) {
                    for (int c = c2 - 1; c > c1; c--) arr[r2][c]=count++;
                    for (int r = r2; r > r1; r--) arr[r][c1]=count++;
                }
                r1++;
                r2--;
                c1++;
                c2--;
            }
            return arr;
        }
    }
    

      

  • 相关阅读:
    Notes of Daily Scrum Meeting(12.18)
    Notes of Daily Scrum Meeting(12.17)
    Notes of Daily Scrum Meeting(12.16)
    Notes of Daily Scrum Meeting(12.8)
    Notes of Daily Scrum Meeting(12.5)
    Notes of Daily Scrum Meeting(12.3)
    Notes of Daily Scrum Meeting(11.12)
    Linux中profile、bashrc、bash_profile之间的区别和联系
    Linux GCC编译
    mysql 5.7.16 远程连接
  • 原文地址:https://www.cnblogs.com/MrSaver/p/9898989.html
Copyright © 2011-2022 走看看