zoukankan      html  css  js  c++  java
  • 1-3-顺时针旋转矩阵

     1 /*
     2     题目描述:
     3         有一个NxN整数矩阵,请编写一个算法,将矩阵顺时针旋转90度。
     4         给定一个NxN的矩阵,和矩阵的阶数N,请返回旋转后的NxN矩阵,保证N小于等于300。
     5         测试样例:
     6             [[1,2,3],[4,5,6],[7,8,9]],3
     7             返回:[[7,4,1],[8,5,2],[9,6,3]]
     8 */
     9 /*
    10     将矩阵顺时针旋转90度
    11     一圈一圈的进行旋转(交换)。
    12     eg:
    13         1 2 3
    14         4 5 6
    15         7 8 9
    16     先旋转外圈:
    17         首先交换1->3->9->7->1;
    18         然后交换2->6->8->4->2;
    19 */
    20 #include <iostream>
    21 #include <vector>
    22 using namespace std;
    23 
    24 void rotateEdge(vector<vector<int> > &m, int tr, int tc, int dr, int dc){
    25     int times = dc - tc;
    26     int tmp = 0;
    27     for (int i = 0; i < times; i++){
    28         tmp = m[tr][tc+i];
    29         m[tr][tc+i] = m[dr-i][tc];
    30         m[dr-i][tc] = m[dr][dc-i];
    31         m[dr][dc-i] = m[tr+i][dc];
    32         m[tr+i][dc] = tmp;
    33     }
    34 }
    35 vector<vector<int> > rotateMatrix(vector<vector<int> > mat, int n) {
    36     // write code here
    37     int tR = 0;
    38     int tC = 0;
    39     int dR = n-1;
    40     int dC = n-1;
    41     while (tR < dR){
    42         rotateEdge(mat, tR++, tC++, dR--, dC--);
    43     }
    44     return mat;
    45 }
    46 int main(){
    47     vector<vector<int> > matrix;
    48     vector<int> a;
    49     a.push_back(1);
    50     a.push_back(2);
    51     a.push_back(3);/*
    52     a.push_back(4);*/
    53     matrix.push_back(a);
    54 
    55     vector<int> b;
    56     b.push_back(4);
    57     b.push_back(5);
    58     b.push_back(6);/*
    59     b.push_back(8);*/
    60     matrix.push_back(b);
    61 
    62     vector<int> c;
    63     c.push_back(7);
    64     c.push_back(8);
    65     c.push_back(9);/*
    66     c.push_back(12);*/
    67     matrix.push_back(c);
    68 
    69     vector<vector<int> > rt;
    70     rt = rotateMatrix(matrix,3);
    71     for (int i = 0; i < 3; i++){
    72         for (int j = 0; j < 3; j++)
    73             cout << rt[i][j] << ",";
    74         cout << endl;
    75     }
    76     return 0;
    77 }
  • 相关阅读:
    42.接雨水 Trapping Rain Water
    6.Zigzag Z 字形变换
    级数求和
    三连击(两个for循环轻松搞定)
    经济学人:Facebook的第三幕(1)
    markdown编辑器
    QUERY
    在badi中按照正常的message&nbsp;x…
    建workflow的时候提示Prefix&nbsp;…
    ALV控件的简单案例(一)
  • 原文地址:https://www.cnblogs.com/qianmacao/p/4884715.html
Copyright © 2011-2022 走看看