难度:medium
Java:
模拟法,方法类似于LeetCode.54.螺旋矩阵,与这道题不同的是,本题的解法我没有使用上下左右边界大小去判定跳出,而是使用一共要打印的数的总数去计算,当n*n个数都被写入数组时,则跳出;
class Solution {
public int[][] generateMatrix(int n) {
int[][] ans = new int[n][n];
int num = n * n;
int up = 0;
int down = n - 1;
int left = 0;
int right = n - 1;
for (int element = 1; element <= num;) {
for (int i = left; i <= right; i++) {
ans[up][i] = element++;
}
up++;
for (int i = up; i <= down; i++) {
ans[i][right] = element++;
}
right--;
for (int i = right; i >= left; i--) {
ans[down][i] = element++;
}
down--;
for (int i = down; i >= up; i--) {
ans[i][left] = element++;
}
left++;
}
return ans;
}
}
复杂度分析:
- 时间复杂度:O(n^2),二维数组中的每个元素都被遍历
- 空间复杂度:O(1),除了返回矩阵外,空间复杂度是常数