题目
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
示例
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n = 1
输出:[[1]]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/spiral-matrix-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
####方法1
和螺旋矩阵(I)差不多
https://blog.csdn.net/qq_42467009/article/details/118607156?spm=1001.2014.3001.5502
Python实现
class Solution:
def generateMatrix(self, n: int) -> List[List[int]]:
res = [[0]*n for i in range(n)]
top,left,k=0,0,1
bottom,right=n-1,n-1
while True:
for i in range(left,right+1):
res[top][i] = k
k+=1
top+=1
if top>bottom:
break
for i in range(top,bottom+1):
res[i][right] = k
k+=1
right-=1
if left>right:
break
for i in range(right,left-1,-1):
res[bottom][i] = k
k+=1
bottom-=1
if top>bottom:
break
for i in range(bottom,top-1,-1):
res[i][left]=k
k+=1
left+=1
if left>right:
break
return res
Java实现1
注意!!!最后一个for循环,每次都把 i 和 left 写反了 郁闷 ☹
class Solution {
public int[][] generateMatrix(int n) {
int top = 0, left = 0;
int down = n - 1, right = n - 1;
int[][] res = new int[n][n];
int flag = 1;
while (true){
for (int i = left; i <= right; i++){
res[top][i] = flag;
flag++;
}
top++;
if (top > down) break;
for (int i = top; i <= down; i++){
res[i][right] = flag;
flag++;
}
right--;
if (left > right) break;
for (int i = right; i >= left; i--){
res[down][i] = flag;
flag++;
}
down--;
if (top > down) break;
for (int i = down; i >= top; i--){
res[i][left] = flag;
flag++;
}
left++;
if (left > right) break;
}
return res;
}
}
Java实现2
class Solution {
public int[][] generateMatrix(int n) {
if (n == 1) {
int[][] matrix = new int[1][1];
matrix[0][0] = 1;
return matrix;
}
int[][] matrix = new int[n][n];
int count = 1;
for (int i = 0; i < n; i++) {
// 加上行
for (int j = i; j < n; j++) {
matrix[i][j] = count;
count++;
}
// 加右列
for (int k = i + 1; k < n; k++) {
matrix[k][n - 1] = count;
count++;
}
// 加下行
for (int r = n - 2; r >= i; r--) {
matrix[n - 1][r] = count;
count++;
}
// 加左列
for (int s = n - 2; s >= i + 1; s--) {
matrix[s][i] = count;
count++;
}
if (n == 0) {
break;
}
n--;
}
return matrix;
}
}