48. 旋转图像

  1. class Solution {
  2. public void rotate(int[][] matrix) {
  3. if (matrix.length != matrix[0].length)
  4. return;
  5. int n = matrix.length;
  6. // 解法一:
  7. // int[][] matrixNew = new int[n][n];
  8. // for (int i = 0; i < n; i++) {
  9. // for (int j = 0; j < n; j++) {
  10. // matrixNew[j][n - 1 - i] = matrix[i][j];
  11. // }
  12. // }
  13. // // 将每个位置对应的值写回
  14. // for (int i = 0; i < n; i++) {
  15. // for (int j = 0; j < n; j++) {
  16. // matrix[i][j] = matrixNew[i][j];
  17. // }
  18. // }
  19. // 由于题目限定不能使用新的空间,因此下面采用方法二:
  20. // 解法二:一维数组旋转+方阵原地转置
  21. for (int i = 0; i < n / 2; i++) {
  22. for (int j = 0; j < n; j++) {
  23. int tmp = matrix[i][j];
  24. matrix[i][j] = matrix[n - 1 -i][j];
  25. matrix[n - 1 - i][j] = tmp;
  26. }
  27. }
  28. for (int i = 0; i < n; i++) {
  29. for (int j = 0; j < i; j++) {
  30. int tmp = matrix[i][j];
  31. matrix[i][j] = matrix[j][i];
  32. matrix[j][i] = tmp;
  33. }
  34. }
  35. }
  36. }