LeetCode:螺旋矩阵||59
Posted 子烁爱学习
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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; } }
以上是关于LeetCode:螺旋矩阵||59的主要内容,如果未能解决你的问题,请参考以下文章