现有一个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;
}
}
public class Transform { public static int[][] transformImage(int[][] mat, int n) { if (mat == null) { return null; } int temp = 0; for(int i=0;i<n-1;i++){ for(int j=0;j<n-i-1;j++){ temp = mat[i][j]; mat[i][j] = mat[n-j-1][n-i-1]; mat[n-j-1][n-i-1] = temp; } } for(int i=0;i<(n/2);++i){ for(int j=0;j<n;++j){ temp = mat[i][j]; mat[i][j] = mat[n-i-1][j]; mat[n-i-1][j] = temp; } } return mat; } }