示例 1:
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n = 1
输出:[[1]]
提示:
1 <= n <= 20
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/spiral-matrix-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
定义四个指针,上、右、下、左,上、左指针从0递增到n-1,右、下指针从n-1递减到0。
指针按顺时针移动,在一趟循环内先上指针自增、再右指针自减、再下指针自减、最后左指针自增, 可以实现一次顺时针循环。
代码:
class Solution {
/**
思路:定义四个指针,上、右、下、左,上、左指针从0递增到n-1,右、下指针从n-1递减到0
指针按顺时针移动,在一趟循环内先上指针自增、再右指针自减、再下指针自减、最后左指针自增,
可以实现一次顺时针循环
*/
public int[][] generateMatrix(int n) {
int[][] matrix = new int[n][n];
//定义四个指针
int left = 0, right = n - 1, top = 0, bottom = n - 1;
//定义第一个数和最后一个数
int num = 1, target = n * n;
while(num <= target) {
for(int i = left; i <= right; i++) matrix[top][i] = num++; //从左到右
top++;
for(int i = top; i <= bottom; i++) matrix[i][right] = num++; //从上到下
right--;
for(int i = right; i >= left; i--) matrix[bottom][i] = num++; //从右到左
bottom--;
for(int i = bottom; i>= top; i--) matrix[i][left] = num++; //从下到上
left++;
}
return matrix;
}
}
结果: