题目描述
强烈建议看题解视频
此题解为 java 版本
Java
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner s = new Scanner(System.in);
int m = s.nextInt();
int n = s.nextInt();
matrix(m,n);
}
public static void matrix (int m, int n){
int[][] q = new int[m][n];
// x 和 y 的偏移量 (详见视频题解)
int[] dx = {-1, 0, 1, 0};
int[] dy = {0, 1, 0, -1};
// 偏移方向,上右下左对应 0,1,2,3
int d = 1;
int x = 0, y = 0;
for(int i = 1; i <= m*n; i ++){
q[x][y] = i;
int a = x + dx[d];
int b = y + dy[d];
if(a < 0 || a >= m || b < 0 || b >= n || q[a][b] != 0){
// 当超过边界或碰到已经填写的,更改偏移方向
d = (d + 1)%4;
}
x = x + dx[d];
y = y + dy[d];
}
for(int i = 0; i < m; i ++){
for(int j = 0; j < n; j ++){
System.out.print(q[i][j]);
System.out.print(" ");
}
System.out.println();
}
}
}