zoukankan      html  css  js  c++  java
  • 旋转图像

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

    将图像顺时针旋转 90 度。示例如下:

    给定 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]
    ]

    对于matrix中的元素matrix[i][j],将其旋转90度后,对应的位置为matrix[j][M-i],M为n-1

    如matrix[0][0]的值为5, 旋转后matrix[0][3-0]的值为5

       matrix[1][0]的值为2,旋转后matrix[0][3-1]的值为2

    实现方法:

    先将矩阵最外的一圈旋转,接着逐渐将内部的圈旋转。

    如矩阵

    5

    1

    9

    11

    2

    4

    8

    10

    13

    3

    6

    7

    15

    14

    12

    16

    首先旋转最外面的一圈,接着旋转里面的一圈。

    最外面一圈只需将5、1、9旋转完成即可,最里面的一圈只需要旋转4即可

    5->11   11->16  16->15  15->5,同样的方法旋转1、9

    对于n x n的矩阵

    第一圈需要旋转n-1个元素,matrix[0][0]  -    matrix[0][n-2]

    第二圈需要旋转n-3个元素,matrix[1][1]  -   matrix[1][n-3]

    第三圈n-5

    。。。

    如下图所示:

     代码如下:

        public static void rotate(int[][] matrix) {
    
            int M = matrix.length - 1;
            // 每行需要旋转的元素个数
            int len = M;
            int temp;
            int i=0, j=0;
            while (len > 0) {
    
                for (j=i; j<i+len; j++) {
                    // 旋转四个元素
                    temp = matrix[j][M-i];
                    matrix[j][M-i] = matrix[i][j];
                    matrix[i][j] = matrix[M-j][i];
                    matrix[M-j][i] = matrix[M-i][M-j];
                    matrix[M-i][M-j] = temp;
                }
                i++;
                len -= 2;
            }
        }
  • 相关阅读:
    time 类
    案例:手动输入一个字符串,所有字符反转,大小写相互转
    案例:使用列表年月日 计算这个日期是这一天的多少天
    用python输出1-100之间所有的质数
    案例:手动输入一个字符串,打散放进一个列表,小写字母反序 大写字母保持不变
    安装数据库教程
    PHP use MySQLi
    PHP logging
    Vagrant
    Flask基础
  • 原文地址:https://www.cnblogs.com/deltadeblog/p/8975878.html
Copyright © 2011-2022 走看看