思路: Naive
纯纯的暴力解法, 没什么算法可研,单纯考研代码能力。
一定要注意循环不变量,左闭右开的原则
比如 for
loop 的边界条件 j < n - loop
和 j >= loop
都代表着左闭右开。
class Solution {
public int[][] generateMatrix(int n) {
// 循环不变量, 左闭右开原则
// loop: 转了几圈
int[][] nums = new int[n][n];
int loop = 0; // 也起到了 Offset 的作用
int start = 0;
int count = 1;
int i, j;
while (loop++ < n / 2) {
for (j = start; j < n - loop; j++) {
nums[start][j] = count++;
}
for (i = start; i < n - loop; i++) {
nums[i][j] = count++;
}
for (; j >= loop; j--) {
nums[i][j] = count++;
}
for (; i >= loop; i--) {
nums[i][j] = count++;
}
start++;
}
if (n % 2 == 1) {
nums[start][start] = count;
}
return nums;
}
}
时间: O(n^2)
空间: O(n^2)