有一个NxN整数矩阵,请编写一个算法,将矩阵顺时针旋转90度。
给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵,保证N小于等于300。
测试样例:
[[1,2,3],[4,5,6],[7,8,9]],3
返回:[[7,4,1],[8,5,2],[9,6,3]]
import java.util.*;
public class Rotate {
public int[][] rotateMatrix(int[][] mat, int n) {
int tR = 0;
int dR = mat.length-1;
int tC = 0;
int dC = mat[0].length-1;
while (tR<dR && tC<dC) {
solve(mat, tR++, tC++, dR--, dC--);
}
return mat;
}
private void solve(int[][] mat, int tR, int tC, int dR, int dC) {
int times = dR - tR;
for (int i = 0; i != times; i++) {
int tmp = mat[tR][tC+i];
mat[tR][tC+i] = mat[dR-i][tC];
mat[dR-i][tC] = mat[dR][dC-i];
mat[dR][dC-i] = mat[tR+i][dC];
mat[tR+i][dC]= tmp;
}
}
}