zoukankan      html  css  js  c++  java
  • 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]
    ]

    Example 2:

    Given input matrix =
    [
      [ 5, 1, 9,11],
      [ 2, 4, 8,10],
      [13, 3, 6, 7],
      [15,14,12,16]
    ], 
    
    rotate the input matrix in-place such that it becomes:
    [
      [15,13, 2, 5],
      [14, 3, 4, 1],
      [12, 6, 8, 9],
      [16, 7,10,11]
    ]
    将N*N的矩阵,顺时针旋转90度

    例如:
    1 2 3 7 8 9 7 4 1

    4 5 6 =》 4 5 6 =》 8 5 2

    7 8 9 1 2 3 9 6 3
     1  public void swapUpDown(int[][] matrix, int rowUp,int rowDown) {
     2         if(matrix.length == 0) return;
     3         for (int i = 0; i < matrix[0].length; i++) {
     4             int temp = matrix[rowUp][i];
     5             matrix[rowUp][i] = matrix[rowDown][i];
     6             matrix[rowDown][i]= temp;
     7         }
     8     }
     9 
    10     public void swapLeftRight(int[][] matrix, int colLeft,int colRight) {
    11         for (int i = 0; i < matrix.length; i++) {
    12             int temp = matrix[i][colLeft];
    13             matrix[i][colLeft] = matrix[i][colRight];
    14             matrix[i][colRight] = temp;
    15         }
    16     }
    17     
    18     public void rotate(int[][] matrix) {
    19         int length = matrix.length;
    20         if (length < 2) return;
    21 //        顺时针:上下互换  逆时针:左右互换
    22         int mid = matrix.length / 2;
    23         for (int col = 0; col < mid; col++) {
    24             if (length % 2 == 0) {
    25                 swapUpDown(matrix, col,mid * 2 - col - 1);
    26             } else {
    27                 swapUpDown(matrix, col,mid * 2 - col);
    28             }
    29         }
    //沿着左上到右下的对角线,交换对称的节点
    30 for (int i = 0; i < matrix.length; i++) { 31 for (int j = i + 1; j < matrix[i].length; j++) { 32 int temp = matrix[i][j]; 33 matrix[i][j] = matrix[j][i]; 34 matrix[j][i] = temp; 35 } 36 } 37 }
  • 相关阅读:
    Java基础系列(3)- 程序流程控制
    Linux 文本处理三剑客
    POJ3592 Instantaneous Transference题解
    插入排序的优化非希尔【不靠谱地讲可以优化到O(nlogn)】 USACO 丑数
    BZOJ2818 与 BZOJ2301【euler,线性筛,莫比乌斯】
    BZOJ1857 传送带 (三分法求单峰函数极值)
    线段树详解
    二叉查找树 详解
    最小函数值 洛谷P2085
    二叉树的遍历转换(层序,中序转先序)
  • 原文地址:https://www.cnblogs.com/wzj4858/p/7675405.html
Copyright © 2011-2022 走看看