Leetcode 48. Rotate Image
- 题目
- 解法:transpose and reverse
题目
解法:transpose and reverse
对于这种题目,我个人觉得知道一种最经典直观的解法就好了。先transpose再reverse by row,这是最直观也是容易理解的方法。顺便也学习了transpose操作其实这么简单,说实话之前都没有注意,这是个非常实用的东西。
稍微拓展一下,如果是逆时针的话就更简单:transpose之后按照row为单位进行reverse就好。就是第一行跟最后一行对调,第二行跟倒数第二行对调,以此类推
python代码如下:
class Solution:def rotate(self, matrix: List[List[int]]) -> None:"""Do not return anything, modify matrix in-place instead."""n = len(matrix)# transposefor i in range(n):for j in range(i,n):matrix[i][j],matrix[j][i] = matrix[j][i],matrix[i][j]# reverse by rowfor i in range(n):matrix[i] = matrix[i][::-1]
C++代码如下:
c++只需要使用一个swap函数就全部搞定
class Solution {
public:void rotate(vector<vector<int>>& matrix) {
int n = matrix.size();for (int i=0;i<n;i++){
for (int j=i;j<n;j++){
swap(matrix[i][j],matrix[j][i]);}}for (int i=0;i<n;i++){
for (int j=0,k=n-1;j<k;j++,k--){
swap(matrix[i][j],matrix[i][k]);}}}
};