推荐阅读
算法day01_ 27. 移除元素、977.有序数组的平方
算法day02_209.长度最小的子数组
目录
- 推荐阅读
- 59.螺旋矩阵 II
- 题目
- 思路
- 解法
59.螺旋矩阵 II
题目
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
思路
顺时针螺旋排列的正方形矩阵的过程:
- 填充上行从左到右
- 填充右列从上到下
- 填充下行从右到左
- 填充左列从下到上
由外向内一圈一圈这么画下去。
按照左闭右开的原则,画出相应的图。
解法
代码示例
class Solution {
public int[][] generateMatrix(int n) {
int startX = 0;
int startY = 0;
int[][] nums = new int[n][n];
int mid = n / 2;// 如果n为奇数,那么最中间的位置为mid,例如 n 为3,中间的位置下标为【1,1】
int m = 0;// 控制循环次数,每循环一圈加一
int offset = 1;// 每循环一圈,右边界收缩一位
int count = 1;
int i, j;
while (m++ < mid) {
for (j = startY; j < n - offset; j++) {
nums[startX][j] = count++;
}
for (i = startX; i < n - offset; i++) {
nums[i][j] = count++;
}
for (; j > startY; j--) {
nums[i][j] = count++;
}
for (; i > startX; i--) {
nums[i][j] = count++;
}
startX++;
startY++;
offset++;
}
if (n % 2 != 0) {
nums[mid][mid] = count;
}
return nums;
}
}
- 时间复杂度 O(n^2): 模拟遍历二维矩阵的时间
- 空间复杂度 O(1)