Leetcode算法学习日志-48 Rotate Image

来源:互联网 发布:周小平扒皮网络大v 编辑:程序博客网 时间:2024/06/06 14:15

Leetcode 48 Rotate Image

题目原文

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

Rotate the image by 90 degrees (clockwise).

Note:
You have to rotate the image in-place, which means you have to modify the input 2D matrix directly.DO NOT allocate another 2D matrix and do the rotation.

Example 1:

Given input matrix = [  [1,2,3],  [4,5,6],  [7,8,9]],rotate the input matrix in-place such that it becomes:[  [7,4,1],  [8,5,2],  [9,6,3]]

题意分析

将一个方阵表示的图像向顺时针旋转90度,方法中不能使用额外的方阵空间,也就是旋转需要在原址操作。

解法分析

本题解法比较巧妙,对一个方阵,如果需要顺时针旋转90度,只需要先将所有的行反向排列,再对新的方阵做一次转置。如果是逆时针旋转,则是将所有行反向排列。C++代码如下:

class Solution {public:    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]);        }      }};
转置操作用swap进行,注意对角线上的元素不用操作。