leetcode------Spiral Matrix II

标题: Spiral Matrix II 
通过率: 31.3
难度: 中等

 

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×3下一循环是从9开始。
由上描述可以看出来每次循环的起点依次是(0,0)-》(1,1)-》(2,2)-》(3,3)
每次叠加都是四个循环。直接看代码:
 1 public class Solution {
 2     public int[][] generateMatrix(int n) {
 3         int [][] result=new int[n][n];
 4         int value=1;
 5         int startx=0,starty=0,endx=n-1,endy=n-1;
 6         while(startx<=endx){
 7             value=contronl(startx,starty,endx,endy,value,result);
 8             startx++;
 9             starty++;
10             endx--;
11             endy--;
12         }
13         return result;
14         
15     }
16     public int contronl(int startx,int starty,int endx,int endy,int value,int[][] result){
17         if(startx==endx){
18             result[startx][starty]=value;
19             return -1;
20         }
21         for(int i=starty;i<=endy;i++){//向右
22             result[startx][i]=value;
23             value++;
24         }
25         for(int i=startx+1;i<=endx;i++){向下
26             result[i][endy]=value;
27             value++;
28         }
29         for(int i=endy-1;i>=starty;i--){向左
30             result[endx][i]=value;
31             value++;
32         }
33         for(int i=endx-1;i>=startx+1;i--){向上
34             result[i][starty]=value;
35             value++;
36             
37         }
38         return value;
39     }
40 }

 

posted @ 2015-02-01 11:27  pku_smile  阅读(192)  评论(0编辑  收藏  举报