public class RotateMatrix {
public static int[][] rotate(int[][] matrix, int flag){
int m = matrix.length, n = matrix[0].length;
int[][] trans = new int[n][m];
//transpose matrix
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
trans[j][i] = matrix[i][j];
}
}
if (flag == 1) { // rotate clockwise
for (int i = 0; i < n; i++) {
for (int j = 0; j < m / 2; j++) {
int tmp = trans[i][j];
trans[i][j] = trans[i][m - 1 - j];
trans[i][m - 1 - j] = tmp;
}
}
}
else { // rotate anti-clockwise
for (int j = 0; j < m; j++) {
for (int i = 0; i < n / 2; i++) {
int tmp = trans[i][j];
trans[i][j] = trans[n - 1 - i][j];
trans[n - 1 - i][j] = tmp;
}
}
}
return trans;
}
}