zoukankan      html  css  js  c++  java
  • leetcode-48.旋转图像

    leetcode-48.旋转图像

    point: 数组

    题意

    给定一个 × n 的二维矩阵表示一个图像。

    将图像顺时针旋转 90 度。

    说明:

    你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。

    示例 1:

    给定 matrix = 
    [
      [1,2,3],
      [4,5,6],
      [7,8,9]
    ],
    
    原地旋转输入矩阵,使其变为:
    [
      [7,4,1],
      [8,5,2],
      [9,6,3]
    ]
    

    示例 2:

    给定 matrix =
    [
      [ 5, 1, 9,11],
      [ 2, 4, 8,10],
      [13, 3, 6, 7],
      [15,14,12,16]
    ], 
    
    原地旋转输入矩阵,使其变为:
    [
      [15,13, 2, 5],
      [14, 3, 4, 1],
      [12, 6, 8, 9],
      [16, 7,10,11]
    ]

    算法1

    简单点就是,用一个栈来按照顺序存储每个元素,然后再依次循环更新数组。但是题目要求在原地实现。

     1 class Solution {
     2 public:
     3     void rotate(vector<vector<int>>& matrix) {
     4         vector<int> temp;
     5         int i, j;
     6         for(i=matrix[0].size()-1; i>=0; i--)
     7         {
     8             for(int j=0; j<matrix.size(); j++)
     9             {
    10                 temp.push_back(matrix[j][i]);
    11             }
    12         }
    13         
    14         for(i=0; i<matrix.size(); i++)
    15         {
    16             for(j=0; j<matrix[0].size(); j++)
    17             {
    18                 matrix[i][j] = temp[temp.size()-1];
    19                 temp.pop_back();
    20             }
    21         }
    22     }
    23 };
    View Code

    算法2

    先转置矩阵,再反转(左右镜像)。左右交换可以使用reverse(begin, end)

    class Solution {
    public:
        void rotate(vector<vector<int>>& matrix) {
            int i, j;
            for(i=0; i<matrix.size(); i++)
            {
                for(int j=0; j<i; j++)
                {
                    swap(matrix[i][j], matrix[j][i]);
                }
            }
            
            for(i=0; i<matrix.size(); i++)
            {
                reverse(matrix[i].begin(), matrix[i].end());
            }
        }
    };
    View Code
  • 相关阅读:
    Mysql主外键
    行列转换
    简单的增删改查
    day22 面向对象基础
    day21 xml模块 ATM+购物车
    python学习 day19 configparser模块 os模块 subprocess模块
    day18 logging模块 sys shelve
    day17 正则表达式 re模块和hashlib模块
    day16 包的使用 json time 常用模块
    day15模块内容
  • 原文地址:https://www.cnblogs.com/yocichen/p/10370418.html
Copyright © 2011-2022 走看看