1.题目描述
. - 力扣(LeetCode)
给你一个正整数
n
,生成一个包含1
到n2
所有元素,且元素按顺时针顺序螺旋排列的n x n
正方形矩阵matrix
。示例 1:
输入:n = 3 输出:[[1,2,3],[8,9,4],[7,6,5]]示例 2:
输入:n = 1 输出:[[1]]提示:
1 <= n <= 20
2.解题思路
步骤,
1. 声明loop, 表示要转几圈 loop<n/2
2.申明offset,每次划线的边界,n,n-1,n-2,n-3.... , offset每次画完一圈自增1
2. 转一圈需要四条线, 定义好边界
从左到右边: i=startx, j=[starty, n-offset)
从右上到右下:i=[startx, n-offset), j=n-offset
从右下到左下:i -> (startx, n-offset] , j=n-offset, i为降序
从左到左上:i -> startx , j=(staty, n-offset], j为降序
3.代码
import java.util.Scanner;
class Solution {
public int[][] generateMatrix(int n) {
int[][] result = new int[n][n];
for(int i=0;i<n;i++){
result[i] = new int[n];
}
int loop = n/2, startx = 0, starty = 0, offset = 1, count = 1;
while((loop--) >=1 ){
int i = startx, j = starty;
for(;j<n-offset;j++){
result[i][j] = count++;
}
for(;i<n-offset;i++){
result[i][j] = count++;
}
for(;j>starty;j--){
result[i][j] = count++;
}
for(;i>startx;i--){
result[i][j] = count++;
}
startx = startx+1;
starty = starty+1;
offset = offset +1;
}
if(n%2 == 1){
result[n/2][n/2] = count;
}
return result;
}
}