Idiot-maker

  :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

https://leetcode.com/problems/spiral-matrix-ii/

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 ]
]

解题思路:

和 Spiral Matrix 基本类似,只需要加入一个递增的值,循环打印就可以了。

public class Solution {
    public int[][] generateMatrix(int n) {
        int[][] matrix = new int[n][n];
        if(n == 0){
            return matrix;
        }
        
        int left = 0, right = matrix[0].length - 1, top = 0, bottom = matrix.length - 1;
        int max = 0;
        while(left <= right && top <= bottom){
            max = spiralEdge(matrix, left, right, top, bottom, max);
            left++;
            right--;
            top++;
            bottom--;
        }
        return matrix;
    }
    
    public int spiralEdge(int[][] matrix, int left, int right, int top, int bottom, int max){
        //打印上边
        for(int i = left; i <= right; i++){
            matrix[top][i] = ++max;
        }
        //打印右边
        for(int i = top + 1; i <= bottom; i++){
            matrix[i][right] = ++max;
        }
        if(left == right || top == bottom){
            return max;
        }
        //打印下边
        for(int i = right - 1; i >= left; i--){
            matrix[bottom][i] = ++max;
        }
        //打印左边
        for(int i = bottom - 1; i > top; i--){
            matrix[i][left] = ++max;
        }
        return max;
    }
}

 

posted on 2015-03-19 13:22  NickyYe  阅读(121)  评论(0编辑  收藏  举报