中午是猿辅导水果时间,小猿会给每个同学发水果。猿辅导有一个矩形的办公区域,共有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(); } }