• LeetCode 面试题 01.07. 旋转矩阵


    给你一幅由 N × N 矩阵表示的图像,其中每个像素的大小为 4 字节。请你设计一种算法,将图像旋转 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]
    ]
    思路:将矩阵右旋90度并且不利用数组,那我们可以将每个位置旋转的规律找出来,可以发现,将一个位置的元素彻底转换,经过了四个过程。
    我们可以先将最外层的元素都转换好,在进行次外层,次次外层,依次。。。
    然后就是两层循环的条件啦,由于我们跑一圈只需要遍历一行元素,所以,总行数/2;内层循环是考虑的列,画图可知,我们转换内层元素需要将两头掐掉,所以要减去外层循环数。
    代码如下:
     1 void rotate(int** matrix, int matrixSize, int* matrixColSize){
     2     int i,j,temp;
     3     for(i=0;i<matrixSize/2;i++){
     4         for(j=i;j<*matrixColSize-i-1;j++){
     5             temp=matrix[i][j];
     6             matrix[i][j]=matrix[matrixSize-j-1][i];
     7             matrix[matrixSize-j-1][i]=matrix[matrixSize-i-1][*matrixColSize-j-1];
     8             matrix[matrixSize-i-1][*matrixColSize-j-1]=matrix[j][*matrixColSize-i-1];
     9             matrix[j][*matrixColSize-i-1]=temp;
    10         }
    11     }
    12     return rotate;
    13 }
  • 相关阅读:
    距离某天还有多久
    U3D各键值说明
    一些比较重要的函数
    U3D功能脚本备忘
    沟边
    渲染排序
    字符串转整数备录
    沟边
    U3D优化
    Unity中的四个路径
  • 原文地址:https://www.cnblogs.com/woju/p/12656608.html
Copyright © 2020-2023  润新知