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

题目解答

解题思路

用四个指针指向二位数组的行、列的首尾,当这一行或者这一列已经填满后,就改变指针;循环退出的条件是 iMin > iMax 后者 jMin > jMax。

代码实现

public class Solution {
    public int[][] generateMatrix(int n) {
        if(n == 0)
            return new int[0][0];
        int[][] arr = new int[n][n];
        int iMin = 0, iMax = n-1;
        int jMin = 0, jMax = n-1;
        int count = 0;
        while(true){
            //iMin对应的行
            for(int j = jMin; j <= jMax; j++){
                arr[iMin][j] = ++count;
            }
            if(++iMin > iMax)
                break;

            //jMax对应的列
            for(int i = iMin; i <= iMax; i++){
                arr[i][jMax] = ++count;
            }
            if(jMin > (--jMax))
                break;

            //iMax对应的行
            for(int j = jMax; j >= jMin; j--){
                arr[iMax][j] = ++count;
            }
            if(iMin > (--iMax))
                break;

            //iMin对应的列
            for(int i = iMax; i >= iMin; i--){
                arr[i][jMin] = ++count;
            }
            if(++jMin > jMax)
                break;
        }

        return arr;
    }
}

你可能感兴趣的:(Matrix)