中午是猿辅导水果时间,小猿会给每个同学发水果。猿辅导有一个矩形的办公区域,共有N 排,每排M个工位。平时小猿按照从第一排到最后一排的顺序发水果,某一天小猿突然发现似乎旋转着发水果是一种更有趣的方式,所以决定试试按照逆时针方向螺旋发水果。
已知每个工位有一个数字,表示该工位员工的工号,每个员工的工号不同。已知小猿从(0, 0)位置开始,按照逆时针螺旋的顺序发水果,请输出收到水果的员工工号序列。
第一行 两个数, 数组行列 N,M
接下来 N 行,每行 M 个正整数,表示每个位置的员工工号
1 ≤ N ≤ 1000
1 ≤ M ≤ 1000
发放水果工号序列
3 3 1 2 3 4 5 6 7 8 9
1 4 7 8 9 6 3 2 5
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner input;
int N, M, i, j;
int[][] grid;
input = new Scanner(System.in);
while(input.hasNext()){
N = input.nextInt();
M = input.nextInt();
grid = new int[N][M];
for(i = 0; i < N; i++){
for(j = 0; j < M; j++){
grid[i][j] = input.nextInt();
}
}
System.out.println(new Main().Solution(grid, N, M));
}
}
private String Solution(int[][] grid, int N, int M){
int i, j, k, L,delta;
StringBuilder ans;
ans = new StringBuilder();
delta = 0;
while(N > 0 && M > 0){
if(N == 1 || M == 1)
L = N + M - 1;
else
L = (N + M) * 2 - 4;
i = 0;
j = 0;
for(k = 0; k < L; k++){
ans.append(grid[i+delta][j+delta]);
ans.append(" ");
if(i < N - 1 && j == 0){
i++;
}else if(i == N - 1 && j < M - 1){
j++;
}else if(i > 0 && j == M - 1){
i--;
}else if(i == 0 && j > 0){
j--;
}
}
N -= 2;
M -= 2;
delta++;
}
return ans.toString();
}
}