leetcode之图片(矩阵)旋转

题目:

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?

思路:

题目的关键在in-place,否则就太容易了,为了达到in-place只能使用常熟变量的空间,通过类似两变量交换的方式进行多变量循环轮转,即a->b,b->c,c->a这种那个形式(->代表赋值),有了这种思路后,剩下的就是利用几何想象力想象矩阵中的每个节点是如何旋转的了,并需要总结出旋转九十度前后的横纵坐标关系,关系如下:(i,j)->(j,N-1-i),其中N为矩阵的size,剩下的就是要注意旋转时怎么取边进行循环了,只要不要搞出无限循环,随便从哪一边开始都是可以的,从代码量也可以看出这题很简单了,呵呵。

代码;

class Solution {
public:
    void pointcirclerotate(vector<vector<int> > &matrix, int i, int j)
    {
        int msize=matrix.size();
        int tmp=matrix.at(i).at(j);
        matrix.at(i).at(j)=matrix.at(msize-1-j).at(i);
        matrix.at(msize-1-j).at(i)=matrix.at(msize-1-i).at(msize-1-j);
        matrix.at(msize-1-i).at(msize-1-j)=matrix.at(j).at(msize-1-i);
        matrix.at(j).at(msize-1-i)=tmp;
    }
    void rotate(vector<vector<int> > &matrix) {
        int i,j,tmp;
        int msize=matrix.size();
        for(i=0;i<msize/2;i++)
        {
            for(j=i;j<msize-1-i;j++)
            {
                pointcirclerotate(matrix,i,j);
            }
        }
    }
};
时间: 2024-10-13 06:38:44

leetcode之图片(矩阵)旋转的相关文章

【LeetCode】【矩阵旋转】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

android 从相册中选择图片并判断图片是否旋转

今天在做图片合成时,首先从相册中选择图片,然后判断该图片是否旋转了,今天就讲下图片是否旋转,直接上代码 /** * 读取照片exif信息中的旋转角度 * * @param path * 照片路径 * @return角度 获取从相册中选中图片的角度 */ public static int readPictureDegree(String path) { if (TextUtils.isEmpty(path)) { return 0; } int degree = 0; try { ExifInt

CSS3实现图片循环旋转

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>图片循环旋转</title> <style> .ta_c{text-align: center; margin-top: 100px;} @-webkit-keyframes rotation{ from {-webkit-transform: rotate(0deg);} to

windows phone 摄像头得到图片是旋转90&#176;

我上个随笔讲到,windows phone 拍出来的photo如果直接使用是反转了90°的. 研究了很久..终于发现问题.其实..这是使用习惯问题... CameraCaptureUI 得到的photo 其实是 以第2图水平的方向为基准的.为什么我会这样说呢..让我们看一下用模拟器拍摄的photo.注意到左边那些字没有. 再给一个水平的,可以看的更清楚.YUY2(640x480) 说白了..其实水平才是别人老外认为的默认视角..但是有人说..这样子..竖着拍的时候就拿到的却会横着显示..很奇怪.

HDU 4772 Zhuge Liang&#39;s Password (矩阵旋转)

Zhuge Liang's Password Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 931    Accepted Submission(s): 641 Problem Description In the ancient three kingdom period, Zhuge Liang was the most famous

O(1)空间复杂度实现n*n矩阵旋转90度

O(1)空间复杂度实现n*n矩阵旋转90度, #include <iostream> using namespace std; #define ARRAY_SIZE 5 void print_two_array (int a[][ARRAY_SIZE]) { cout << endl;    for (int i=0; i<ARRAY_SIZE; i++) { for (int j=0; j<ARRAY_SIZE; j++) {    cout << a[i

矩阵旋转90度(keep it up)

一张图像表示成NxN的矩阵,图像中每个像素是4个字节,写一个函数把图像旋转90度. 你能原地进行操作吗?(即不开辟额外的存储空间) 这个题第一感觉就是一次交换矩阵的元素: 比如 3*3 矩阵 1 2 3 4 5 6 7 8 9 先处理第一行,一次逆时针旋转四个元素,下面是二次做的 3 2 9          3 6 9 4 5 6          2 5 8 1 8 7          1 4 7 第一次         第二次 如果是5*5的矩阵 1   2   3   4   5 6

Leetcode:Rotate List 链表旋转

Rotate List Given a list, rotate the list to the right by k places, where k is non-negative. For example:Given 1->2->3->4->5->NULL and k = 2,return 4->5->1->2->3->NULL. 解题分析: 不同于数组旋转,数组可以随机存取,数组的旋转可以巧妙的 分成两两部分递归旋转 对于链表的旋转,实际上

让图片任意旋转

前几天做了一个让图片旋转任意角度的功能,今天跟大家分享一下.. 1.首先把力图片加载进来. //strPagePath为图片的路径 System.Drawing.Image ImgPointer = null; if (File.Exists(strPagePath)) ImgPointer = System.Drawing.Image.FromFile(strPagePath);//加载图片 2.设置图片显示的坐标 //设置坐标和显示图片框的大小(我这里图片框大小为图片大小) Rectangl