zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    40_接口类型的使用
    39_方法值和方法表达式
    38_方法的重写
    37_匿名字段方法的继承
    36_方法集的使用
    文件方式实现完整的英文词频统计实例
    组合数据类型练习,英文词频统计实例上
    英文词频统计预备,组合数据类型练习
    凯撒密码、GDP格式化输出、99乘法表
    字符串基本操作‘’
  • 原文地址:https://www.cnblogs.com/woju/p/12656608.html
Copyright © 2011-2022 走看看