Leetcode 48 Rotate Image

在这里插入图片描述
在这里插入图片描述
思路一: 我自己没什么思路,可能因为第一次做矩阵题目吧。看了答案后觉得还是挺简单的,感觉主要还是对矩阵一些性质不太熟悉。这题其实就只要先tranpose矩阵(一开始我连transpose是什么都不知道),然后再把每一行都reverse一下就好了,自己画个图,走一遍就知道这是对的了。下面直接展示代码:

class Solution {
  public void rotate(int[][] matrix) {
    int n = matrix.length;

    // transpose matrix
    for(int i = 0; i < n; i++){
        for(int j = i; j < n; j++){
            int temp = matrix[j][i];
            matrix[j][i] = matrix[i][j];
            matrix[i][j] = temp;
        }
    }
      
    // reverse each row
      for(int i = 0; i < n; i++){
          for(int j = 0; j < n / 2; j++){
              int temp = matrix[i][j];
              matrix[i][j] = matrix[i][n - j - 1];
              matrix[i][n - j - 1] = temp;
          }
      }
  
  }
}

思路二: 这是discussion part里的high votes answer。他提供了一种common solution来解决rotate image 问题,这边我摆上链接:链接。我没有去实现,复盘的时候可以去实现一下,应该也不是很烦。

/*
 * clockwise rotate
 * first reverse up to down, then swap the symmetry 
 * 1 2 3     7 8 9     7 4 1
 * 4 5 6  => 4 5 6  => 8 5 2
 * 7 8 9     1 2 3     9 6 3
*/
void rotate(vector<vector<int> > &matrix) {
    reverse(matrix.begin(), matrix.end());
    for (int i = 0; i < matrix.size(); ++i) {
        for (int j = i + 1; j < matrix[i].size(); ++j)
            swap(matrix[i][j], matrix[j][i]);
    }
}

/*
 1. anticlockwise rotate
 2. first reverse left to right, then swap the symmetry
 3. 1 2 3     3 2 1     3 6 9
 4. 4 5 6  => 6 5 4  => 2 5 8
 5. 7 8 9     9 8 7     1 4 7
*/
void anti_rotate(vector<vector<int> > &matrix) {
    for (auto vi : matrix) reverse(vi.begin(), vi.end());
    for (int i = 0; i < matrix.size(); ++i) {
        for (int j = i + 1; j < matrix[i].size(); ++j)
            swap(matrix[i][j], matrix[j][i]);
    }
}

总结:

  1. 多熟悉java矩阵相关的知识
展开阅读全文

Windows版YOLOv4目标检测实战:训练自己的数据集

04-26
©️2020 CSDN 皮肤主题: 像素格子 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值