59. Spiral Matrix II
来源:互联网 发布:程序员项目经历怎么写 编辑:程序博客网 时间:2024/06/06 09:10
Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
For example,
Given n = 3
,
[ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ]]
题意:给定一个整数n,将1到n2 这些数按顺序填入n阶矩阵中,填充规则,从矩阵左上角开始顺时针依次填充,呈现螺旋结构。如上图。
我们定义一个方法fon(int[][] a,int i)用来实现下面这样一个功能:
从a[i][i]开始,顺时针填充好矩阵的一个闭合回路,例如n=3,i=0时,从a[0][0]=1开始,向右填充到3,再向下填充到5,之后向左填充到7,最后向上填充到8.
那么对于给定的n,只需要填充i=0,1,2.....n/2即可。
需要注意的地方是:我们初始化了一个n阶矩阵元素为-1.这是方便我们在fon方法中能够通过判断下一个元素是否为-1进行转向的操作。
下面贴代码:
public class Solution { public int[][] generateMatrix(int n) { int[][] a = new int[n][n]; if(n==0) return a; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ a[i][j] = -1; } } a[0][0] = 1; if(n%2==1) a[n/2][n/2] = n*n; for(int i=0;i<n/2;i++){ //循环填充每个回路 fon(a,i); } return a; } public void fon(int[][] a ,int i){ //填充一个从a[i][i]开始的闭合回路; int j = i,n = a.length; if(i != 0) a[i][j]= a[i][j-1]+1; while(j+1<n && a[i][j+1]==-1){ //判断向右填充是否继续进行还是进行转向 j++; a[i][j] = a[i][j-1]+1; } while(i+1<n && a[i+1][j]==-1){ //判断向下填充是否继续进行还是进行转向 i++; a[i][j] = a[i-1][j]+1; } while(j-1>=0 && a[i][j-1]==-1){ //判断向左填充是否继续进行还是进行转向 j--; a[i][j] = a[i][j+1] + 1; } while(i-1>=0 && a[i-1][j]==-1){ //判断向右填充是否继续进行还是进行转向 i--; a[i][j] = a[i+1][j] + 1; } }}
阅读全文
0 0
- 59.Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- 59. Spiral Matrix II
- LeetCode 120. Triangle
- Windows版apache服务器下载
- Oracle安装后只有三个服务项,少了最重要的监听等项
- 用scikit-learn和pandas学习线性回归
- 结构体定义的三种方式
- 59. Spiral Matrix II
- scikit-learn 和pandas 基于windows单机机器学习环境的搭建
- mysql中UPDATE更新数据where以另一个selecet子句为结果的1093错误
- 机器学习研究与开发平台的选择
- JQuery中attr()和prop()方法的区别
- ms 15 034 security
- 代码实现XML布局
- java 使用Apache的 commmon-i0 库 操作IO与 文件
- 进程模块句柄