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 }

 

你可能感兴趣的:(LeetCode)