0%

48. Rotate Image

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;
}
}
};