#leetcode#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 & Spiral Matrix II 都是学习了Code Ganker大神的思路, II的绕圈方法我稍微不大一样, 感觉这样每一个边起止点一致更容易记忆一些。


刚开始看这两个题感觉十分头疼, 弄清楚怎么转圈之后就比较简单了, 红军不怕远征难,万水千山只等闲。。。

public class Solution {
    public int[][] generateMatrix(int n) {
        int[][] res = new int[n][n];
        int levelNum = n / 2;
        int num = 1;
        for(int level = 0; level < levelNum; level++){
            for(int i = level; i < n - level - 1; i++){
                res[level][i] = num++;
            }
            
            for(int i = level; i < n - level - 1; i++){
                res[i][n - level - 1] = num++;
            }
            
            for(int i = n - level - 1; i > level; i--){
                res[n - level - 1][i] = num++;
            }
            
            for(int i = n - level - 1; i > level; i--){
                res[i][level] = num++;
            }
        }
        
        if(n % 2 == 1){
            res[levelNum][levelNum] = num;
        }
        
        return res;
    }
}


有一点要注意是   最后判断是不是奇数层的时候,要用matrix的边长, 而不是 levelNum去对二取余。。     

你可能感兴趣的:(LeetCode)