AcWing 756. Java - 蛇形矩阵
原题链接
困难
作者:
熊本熊本熊
,
2019-05-05 10:46:53
,
所有人可见
,
阅读 1578
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Main solution = new Main();
Scanner reader = new Scanner(System.in);
int n = reader.nextInt();
int m = reader.nextInt();
int[][] ans = solution.python_matrix(n, m);
// 这里用于输出,其实每行最后多输出了一个空格,不过貌似没问题
for(int i =0; i < n; i++){
for(int j = 0; j < m; j++){
System.out.print(ans[i][j]);
System.out.print(" ");
}
System.out.print("\n");
}
}
public int[][] python_matrix(int m, int n){
// 用来填充的矩阵
int[][] ans = new int[m][n];
// 一个记录某个位置是否被访问过的bool矩阵
boolean[][] used = new boolean[m][n];
// 上下左右的方向
int[] dx = {0, 1, 0, -1};
int[] dy = {1, 0, -1, 0};
// 用于填充的数字
int num = 1;
// 初始位置
int x = 0;
int y = 0;
// 用来指示下一个位置的方式
int direction_index = 0;
while (num <= m*n){
ans[x][y] = num;
used[x][y] = true;
num++;
x += dx[direction_index];
y += dy[direction_index];
// 更新下一个目标点的位置后,发现越界/以及访问过,所以要修改位置
if(x < 0 || x >= m || y <0 || y >= n || used[x][y]){
// 说明越界了
x -= dx[direction_index];
y -= dy[direction_index];
direction_index ++;
direction_index %= 4;
x += dx[direction_index];
y += dy[direction_index];
}
}
return ans;
}
}
感觉这道题应该是中等难度,不能算Hard
这道题的标签是语法题hh
在语法题里算Hard~