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;
        }
    }
    

      

  • 相关阅读:
    提单管理
    SAP Using Text Modules in Adobe Forms
    创建设备任务清单
    HR常用事务代码
    SAP 如何查看用户登录信息
    abap常用函数
    CK13物料价格评估的数据ALV显示
    常用事务代码
    计算物料制造成本估算,比较重要的表
    IT_sort用法实例
  • 原文地址:https://www.cnblogs.com/MrSaver/p/9898989.html
Copyright © 2011-2022 走看看