1 解题思想
首先大家可以看下这个系列的第一题:
Leetcode #54. Spiral Matrix 螺旋遍历 解题报告
在54当中,是要求大家以螺旋的方式遍历数组,而这道题是要求你以螺旋的方式将数组填入1.2.3..n^2,填入的数字就是遍历的顺序
所以这道题,本质做法和54是一样的,一样的遍历方式,只是上一道是遍历后输出,这道题是遍历后填入对应的数字就可以
具体的解析请看#54,因为又是随便改改又能AC的题目了
2 原题
Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
For example,
Given n = 3,
You should return the following matrix:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
3 AC解
public class Solution {
/**
* 我就是用上面那题改的。。遍历顺序是一样的
*
* 你看题目给定的n,我都把它变成num,因为我拷贝过来的代码是n和m的。。。改动点就是把list.add改成赋值
*
* 我Matrix | 的做法完全适合Matrix2.。。哈哈哈
* */
public int[][] generateMatrix(int n) {
//if(n==0) return null;
int num=n;
int matrix[][]=new int[n][n];
int m=num-1;
n=num-1;
int mstart=0,nstart=0,i,count=1;
//System.out.println(mstart+" "+m+" "+nstart+" "+n);
while(mstart<=m && nstart<=n){
for( i=nstart;i<=n;i++)
matrix[mstart][i]=count++;
mstart++;
for( i=mstart;i<=m;i++)
matrix[i][n]=count++;
n--;
for( i=n;i>=nstart && m>=mstart;i--)
matrix[m][i]=count++;
m--;
for( i=m;i>=mstart && n>=nstart;i--)
matrix[i][nstart]=count++;
nstart++;
}
return matrix;
}
}