12.27每日一题
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
题解:
本题为模拟一个螺旋矩阵的生成,我们可以理解为正常为矩阵赋值,只不过在特定位置需要改变赋值方向。 本题思维不难,难在如何处理好边界问题以及什么时候转向。
代码:
public class Start {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[][] res = generateMatrix(n);
for(int i=0;i<n;i++){
System.out.println(Arrays.toString(res[i]));
}
}
public static int[][] generateMatrix(int n) {
int l = 0;
int r = n-1;
int t = 0;
int b = n-1;
int[][] mat = new int[n][n];
int num = 1;
while(num <= n*n){
for(int i = l; i <= r; i++) {
mat[t][i] = num++; // 从左往右
}
t++;
for(int i = t; i <= b; i++){
mat[i][r] = num++; // 从上往下
}
r--;
for(int i = r; i >= l; i--){
mat[b][i] = num++; // 从右往左
}
b--;
for(int i = b; i >= t; i--){
mat[i][l] = num++; // 从下到上
}
l++;
}
return mat;
}
}