现有一个NxN的矩阵,阶数为N,请编写一个算法将矩阵顺时针旋转90度并将其作为返回值。要求不使用缓存矩阵,保证N不大于500,元素不大于256,每个元素用int表示。
测试样例:
[[1,2,3],[4,5,6],[7,8,9]],3
返回:[[7,4,1],[8,5,2],[9,6,3]]
import java.util.*; public class Transform { public int[][] transformImage(int[][] mat, int n) { // write code here int temp; for (int m = 0; m < n; m++) { for (int i = 0; i < m; i++) { temp = mat[m][i]; mat[m][i] = mat[i][m]; mat[i][m] = temp; } } for (int m = 0; m < n; m++) { for (int i = 0; i < (n + 1) / 2; i++) { temp = mat[m][i]; mat[m][i] = mat[m][n - i - 1]; mat[m][n - i - 1] = temp; } } return mat; } }
import java.util.*; public class Transform { public int[][] transformImage(int[][] mat, int n) { if(mat == null || n < 1) return null; int[] tmp = new int[n*n]; int k = 0; for(int j = 0; j < n; j++){ for(int i = n-1; i >= 0; i--){ tmp[k++] = mat[i][j]; } } k = 0; for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ mat[i][j] = tmp[k++]; } } return mat; } }
public class Transform { public int[][] transformImage(int[][] mat, int n) { int[][] arra= new int[n][n]; for(int i = 0; i < n ; i++){ for(int j = 0; j < n; j++){ arra[j][n-1-i]=mat[i][j]; } } return arra; } }
//连个变量临时变量我都舍不得用 QAQ //第一步,元素关于左下右上对角线互换 //第二步,元素交换i和n-1-i行 public int[][] transformImage(int[][] mat, int n) { if(mat==null||n<=1) return mat; for(int i=0;i<n-1;i++){ //y=x对角线元素互换 for(int j=0;j<n-1-i;j++){ mat[i][j]=mat[n-j-1][n-i-1]+mat[i][j]; mat[n-j-1][n-i-1]= mat[i][j]-mat[n-j-1][n-i-1]; mat[i][j]=mat[i][j]-mat[n-j-1][n-i-1]; } } for(int i=0;i<n>>1;i++){//交换第i行与n-i-1行 for(int j=0;j<n;j++){ mat[i][j]=mat[n-i-1][j]+mat[i][j]; mat[n-i-1][j]=mat[i][j]-mat[n-i-1][j]; mat[i][j]=mat[i][j]-mat[n-i-1][j]; } } return mat; }
}
public class Transform { public int[][] transformImage(int[][] mat, int n) { // 转置 for (int i = 0; i < n; i++) { for (int j = 0; j < i; j++) { swap(mat, i, j, j, i); } } // 交换 for (int i = 0; i < n; i++) { for (int low = 0, high = n - 1; low < high; low++, high--) { swap(mat, i, low, i, high); } } return mat; } private void swap(int[][] mat, int x1, int y1, int x2, int y2) { int temp = mat[x1][y1]; mat[x1][y1] = mat[x2][y2]; mat[x2][y2] = temp; } }