题目
有一个 整数矩阵,请编写一个算法,将矩阵顺时针旋转 90度 。请返回旋转后的
矩阵。
进阶:空间复杂度 ,时间复杂度
示例1
输入:[[1,2,3],[4,5,6],[7,8,9]],3 返回值:[[7,4,1],[8,5,2],[9,6,3]]
解题思路:交换+翻转
我们以下面示例
作为例子,先将其通过水平轴翻转得到:
或者
再根据副对角线翻转得到:
或者
复杂度分析
时间复杂度: ,该方法需要遍历一次二维数组所有元素 。
空间复杂度: ,该方法使用常数空间 。
我的代码
class Solution {
public void rotate(int[][] matrix) {
int n = matrix.length;
int[][] matrix_new = new int[n][n];
// 上下水平翻转
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
matrix_new[j][n - i - 1] = matrix[i][j];
}
}
// 主对角线翻转
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
matrix[i][j] = matrix_new[i][j];
}
}
}
}
解题思路:交换
通过观察,我们发现主要要循环的将 旋转到
的位置,即可得到最终旋转 90 度的结果。
复杂度分析
时间复杂度: ,该方法需要遍历一次二维数组所有元素 。
空间复杂度: ,该方法使用新的二维数组空间 。
我的代码
public int[][] rotateMatrix(int[][] mat, int n) {
int[][] temp = new int[n][n];//新建temp对象,作为最终返回的对象
for(int i = 0;i < n;i++){
for(int j = 0;j < n;j++){
temp[j][n-1-i] = mat[i][j];//直接交换
}
}
return temp;
}