two spins O(n2)
先上下翻转,再沿对称轴翻转
1 2 3 4 5 6 7 8 9
| class Solution: def rotate(self, matrix: List[List[int]]) -> None: """ Do not return anything, modify matrix in-place instead. """ matrix.reverse() for i in range(len(matrix)): for j in range(i): matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
|
1 2 3 4 5 6 7 8 9
| class Solution: def rotate(self, matrix: List[List[int]]) -> None: """ Do not return anything, modify matrix in-place instead. """ matrix.reverse() for i in range(len(matrix)): for j in range(i + 1, len(matrix)): matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
|
1 2 3 4 5 6 7 8 9
| class Solution { public: void rotate(vector<vector<int>>& matrix) { reverse(matrix.begin(), matrix.end()); for (int i(0); i < matrix.size() - 1; ++i) for (int j(i + 1); j < matrix.size(); ++j) swap(matrix[i][j], matrix[j][i]); } };
|
直接移 O(n2)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| class Solution { public: void rotate(vector<vector<int>>& matrix) { if (matrix.empty()) return; int n(matrix.size() >> 1); for (int row(0); row < n; ++row) for (int col(row); col < matrix.size() - 1 - row; ++col) { auto temp(matrix[row][col]); matrix[row][col] = matrix[matrix.size() - 1 - col][row]; matrix[matrix.size() - 1 - col][row] = matrix[matrix.size() - 1 - row][matrix.size() - 1 - col]; matrix[matrix.size() - 1 - row][matrix.size() - 1 - col] = matrix[col][matrix.size() - 1 - row]; matrix[col][matrix.size() - 1 - row] = temp; } } };
|