推荐阅读
算法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)