码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode:螺旋矩阵||【59】

时间:2018-11-03 02:11:29      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:int   leetcode   math   col   题解   .com   nbsp   难度   元素   

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

  

LeetCode:螺旋矩阵||【59】

标签:int   leetcode   math   col   题解   .com   nbsp   难度   元素   

原文地址:https://www.cnblogs.com/MrSaver/p/9898989.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!