zoukankan      html  css  js  c++  java
  • [LeetCode] Rotate Image n-by-n矩阵顺时针旋转

    You are given an n x n 2D matrix representing an image.

    Rotate the image by 90 degrees (clockwise).

    Follow up:
    Could you do this in-place?

    Hide Tags
     Array
     
      一题严格的数组逻辑操作问题,考虑认真就好,思路:
     
     
    1 2 3 1
    3 4 4 2
    2 4 4 3
    1 3 2 1
    如上表,一共有两圈,对于n 来说,圈数为(n+1)/2,从外圈到内圈,转换了一圈后到下一圈。
     
    我写的代码用了长度len ,其实写j=i 会方便很多。
    需要计算好下标,有个简单的确认,一次转换中的4个数,不相邻的两个数的对应下标和为定值(n-1),例如一个是<i,j>,另一个就是<n-1  -i,n-1  -j>,利用这个规律其实只要确认两个就行。
    代码如下:
     1 #include <iostream>
     2 #include <vector>
     3 #include <iterator>
     4 using namespace std;
     5 
     6 class Solution {
     7 public:
     8     void rotate(vector<vector<int> > &matrix) {
     9         int n =matrix.size();
    10         if(n<2) return ;
    11         for(int i=0;i<(n+1)/2;i++){
    12             for(int len=0;len<=n-2*(i+1);len++){
    13                 int temp = matrix[i][i+len];
    14                 matrix[i][i+len] = matrix[n-1-i-len][i];
    15                 matrix[n-1-i-len][i] = matrix[n-1-i][n-1-i-len];
    16                 matrix[n-1-i][n-1-i-len] = matrix[i+len][n-i-1];
    17                 matrix[i+len][n-i-1] = temp;
    18             }
    19         }
    20     }
    21 };
    22 
    23 int main()
    24 {
    25     vector<vector<int> > matrix;
    26     vector<int> tempm;
    27     int cnt =1;
    28     for(int i=1;i<9;i++){
    29         for(int j=1;j<9;j++)
    30             tempm.push_back(cnt++);
    31         matrix.push_back(tempm);
    32         tempm.clear();
    33     }
    34     Solution sol;
    35     sol.rotate(matrix);
    36     for(int i=0;i<matrix.size();i++){
    37         copy(matrix[i].begin(),matrix[i].end(),ostream_iterator<int>(cout," "));
    38         cout<<endl;
    39     }
    40 
    41     return 0;
    42 }
    View Code
     
  • 相关阅读:
    知识点复习
    【程序人生】一个IT人的立功,立言,立德三不朽
    【朝花夕拾】Android多线程之(三)runOnUiThread篇——程序猿们的贴心小棉袄
    【朝花夕拾】Android多线程之(二)ThreadLocal篇
    【朝花夕拾】Android多线程之(一)View.post()篇
    Camera2笔记
    HangFire多集群切换及DashBoard登录验证
    Linq 动态多条件group by
    Api接口签名验证
    postgre ||连接字段
  • 原文地址:https://www.cnblogs.com/Azhu/p/4128361.html
Copyright © 2011-2022 走看看