IncredibleThings

导航

LeetCode - Spiral Matrix II


Given a positive integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.

Example:

Input: 3
Output:
[
 [ 1, 2, 3 ],
 [ 8, 9, 4 ],
 [ 7, 6, 5 ]
]


本题就是按照螺旋的顺序把数字依次塞进去,我们可以维护上下左右边界的四个变量,一圈一圈往里面添加。最后要注意的是,如果n是奇数,要把中心那个点算上。

class Solution {
    public int[][] generateMatrix(int n) {
        int[][] res = new int[n][n];
        //initialize four top corner
        int left = 0;
        int right = n-1;
        int bottom = n-1;
        int top = 0;
        int num = 1;
        
        while (left < right && top < bottom){
            //left -> right
            for(int i=left; i<right; i++){
                res[top][i] = num++;
            }
            //top -> bottom
            for(int i=top; i<bottom; i++){
                res[i][right] = num++;
            }
            //right -> left
            for (int i = right; i>left; i--){
                res[bottom][i] = num++;
            }
            //bootom -> top
            for(int i = bottom; i>top; i--){
                res[i][left] = num++;
            }
            left++;
            right--;
            bottom--;
            top++;
            
        }
        if(n % 2 == 1){
            res[n/2][n/2] = num;
        }
        return res;
    }
}

 

posted on 2018-05-20 02:39  IncredibleThings  阅读(82)  评论(0编辑  收藏  举报