59. 螺旋矩阵 II

题目描述

给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。

示例

输入: 3
输出:
[
 [ 1, 2, 3 ],
 [ 8, 9, 4 ],
 [ 7, 6, 5 ]
]

题解

思路

和54题思路一样,甚至更简单一点,是正方形。一圈圈打印,每一行或每一列打印时候留下最后一个。

代码

class Solution {
    public int[][] generateMatrix(int n) {
        int[][] matrix = new int[n][n];
        // 遍历填充的数字
        int num = 1;
        // 每一圈左边起始位置和右边结束位置 由于是正方形所以列相同
        int left = 0,right = n-1;
        while(left <= right){
            // 最中间的一个
            if(left==right) matrix[left][right] = num++;
            // 最上面一行 除去最后一个
            for(int i=left;i<right;i++) matrix[left][i] = num++;
            // 最右边一列 除去最后一个
            for(int i=left;i<right;i++) matrix[i][right] = num++;
            // 最下面一行 除去最后一个(逆序)
            for(int i=right;i>left;i--) matrix[right][i] = num++;
            // 最左边一列 除去最后一个(逆序)
            for(int i=right;i>left;i--) matrix[i][left] = num++;
            // 一圈遍历结束 遍历下一圈
            left++;
            right--;
        }
        return matrix;
    }
}
posted @ 2019-06-20 14:51  废物也听歌  阅读(131)  评论(0编辑  收藏  举报