题目
有一个 整数矩阵,请编写一个算法,将矩阵顺时针旋转 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;}
