题目:题目链接
给你一个正整数 n
,生成一个包含 1
到 n2
所有元素,且元素按顺时针顺序螺旋排列的 n x n
正方形矩阵 matrix
。
示例 1:
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n = 1
输出:[[1]]
提示:
1 <= n <= 20
代码:
class Solution {public int[][] generateMatrix(int n) {int [][] res = new int[n][n];int left = 0, right = n-1, top = 0, buttom = n-1;int num = 1, total = n*n;while(num <= total){// 左到右,最上一层元素为res[top][i]for(int i = left; i <= right; i++){res[top][i] = num++;}// 最上面的一层结束 需要top+1,最上层变成第二层top++;// 从上到下,最右层元素为res[i][right]for(int i = top; i <= buttom; i++){res[i][right] = num++;}// 最右侧结束,需要right-1,最右层变成右边倒数第二层right--;// 从右到左,最下层元素为res[bottom][i]for(int i = right; i >= left; i--){res[buttom][i] = num++;}// 最下侧结束,需要buttom-1,最下层变成倒数第二层buttom--;// 从下到上,最左层元素为res[i][left]for(int i = buttom; i >= top; i--){res[i][left] = num++;}// 最左侧结束,需要left+1,最左层变成左边倒数第二层left++;}return res;}}