題目一起來第一反应就是借助额外的内存空间来记录会被被覆盖的数值,但其实看透了是可以不需要使用额外的内存空间,思路如下图
public class Main { public static void main(String[] args) { // Scanner sc = new Scanner(System.in); int[][] matrix = new int[5][5]; for (int i = 0; i < 25; i++) { matrix[i / 5][i % 5] = i + 1; } int n = matrix.length; for (int i = 0; i < n / 2; i++) { for (int j = i; j < n - 1 - i; j++) { int temp = matrix[i][j]; matrix[i][j] = matrix[n - 1 - j][i]; matrix[n - 1 - j][i] = matrix[n - 1 - i][n - 1 - j]; matrix[n - 1 - i][n - 1 - j] = matrix[j][n - 1 - i]; matrix[j][n - 1 - i] = temp; } } for (int[] i : matrix) { for (int j : i) { System.out.print(j + " "); } System.out.println(); } } }