[Leetcode] Spiral Matrix II

 

以螺旋型填充二維陣列

 

思考方式是這樣,四個邊界,順序上、右、下、左,不斷往內縮,限制x,y達到螺旋型填充的目的

以4 * 4 來舉例,先填充1 2 3 4

上邊界往下移動,從5開始 填充5 6 7,右邊界往左移動

 從8開始,填充8 9 10 ,下邊界往上移動

 從11開始,填充11 12,左邊界向右移動

 繼續下一輪,直到上右下左循環中任一次邊界超出,即結束

 

==========================================================================

 1 public int[][] GenerateMatrix(int n)
 2         {
 3             int[][] result = new int[n][];
 4             for(int i = 0; i <n; i++)
 5             {
 6                 result[i] = new int[n];
 7             }
 8             int upLimit = 0, downLimit = n - 1, leftLimit = 0, rightLimit = n - 1;
 9             int val = 0;
10 
11             while (true)
12             {
13                 for (int i = leftLimit; i <= rightLimit; i++)
14                 {
15                     result[leftLimit][i] = ++val;
16                 }
17                 if (++upLimit > downLimit) break;
18 
19                 for (int i = upLimit; i <= downLimit; i++)
20                 {
21                     result[i][rightLimit] = ++val;
22                 }
23                 if (--rightLimit < leftLimit) break;
24 
25                 for (int i = rightLimit; i >= leftLimit; i--)
26                 {
27                     result[downLimit][i] = ++val;
28                 }
29                 if (--downLimit < upLimit) break;
30 
31                 for(int i = downLimit; i >= upLimit; i--)
32                 {
33                     result[i][leftLimit] = ++val;
34                 }
35                 if (++leftLimit > rightLimit) break;
36             }
37 
38             return result;
39         }

 

 

posted on 2019-06-18 17:12  seako  阅读(141)  评论(0编辑  收藏  举报