/* * @lc app=leetcode id=48 lang=javascript * * [48] Rotate Image *//** * @param{number[][]} matrix * @return{void} Do not return anything, modify matrix in-place instead. */varrotate=function (matrix) {// 时间复杂度O(n^2) 空间复杂度O(1)// 做法: 先沿着对角线翻转,然后沿着水平线翻转constn=matrix.length;functionswap(arr, [i, j], [m, n]) {consttemp= arr[i][j]; arr[i][j] = arr[m][n]; arr[m][n] = temp; }for (let i =0; i < n -1; i++) {for (let j =0; j < n - i; j++) {swap(matrix, [i, j], [n - j -1, n - i -1]); } }for (let i =0; i < n /2; i++) {for (let j =0; j < n; j++) {swap(matrix, [i, j], [n - i -1, j]); } }};
Python3 Code:
class Solution:
def rotate(self, matrix: List[List[int]]) -> None:
"""
Do not return anything, modify matrix in-place instead.
先做矩阵转置(即沿着对角线翻转),然后每个列表翻转;
"""
n = len(matrix)
for i in range(n):
for j in range(i, n):
matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
for m in matrix:
m.reverse()
def rotate2(self, matrix: List[List[int]]) -> None:
"""
Do not return anything, modify matrix in-place instead.
通过内置函数zip,可以简单实现矩阵转置,下面的代码等于先整体翻转,后转置;
不过这种写法的空间复杂度其实是O(n);
"""
matrix[:] = map(list, zip(*matrix[::-1]))
CPP Code:
classSolution {public:voidrotate(vector<vector<int>>& matrix) {int N =matrix.size();for (int i =0; i < N /2; ++i) {for (int j = i; j < N - i -1; ++j) {int tmp =matrix[i][j];matrix[i][j] =matrix[N - j -1][i];matrix[N - j -1][i] =matrix[N - i -1][N - j -1];matrix[N - i -1][N - j -1] =matrix[j][N - i -1];matrix[j][N - i -1] = tmp; } } }};