zoukankan      html  css  js  c++  java
  • 旋转图像 · 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]
    ]

     [暴力解法]:

    时间分析:

    空间分析:

    [思维问题]:

    [一句话思路]:

    先xy翻转,再对折。就差一步了,观察力不够没看出来

    [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

    [画图]:

    [一刷]:

    [二刷]:

    [三刷]:

    [四刷]:

    [五刷]:

      [五分钟肉眼debug的结果]:

    [总结]:

    i代表行的坐标,j代表列的坐标,j = i时代表xy 

    [复杂度]:Time complexity: O(m*n) Space complexity: O(m*n)

    [英文数据结构或算法,为什么不用别的数据结构或算法]:

    [其他解法]:

    [Follow Up]:

    [LC给出的题目变变变]:

    289. Game of Life 题号小的很多题,就是一般的数组变换

     [代码风格] :

    public class Solution {
        /*
         * @param matrix: a lists of integers
         * @return: 
         */
        public void rotate(int[][] matrix) {
            //corner case
            if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
                return ;
            }
            int length = matrix[0].length;
            //reverse
            for (int i = 0; i < matrix.length; i++) {
                for (int j = i; j < matrix[0].length; j++) {//xy
                    int temp = matrix[i][j];
                    matrix[i][j] = matrix[j][i];
                    matrix[j][i] = temp;
                }
            }
            //flip
            for (int i = 0; i < matrix.length; i++) {//all row
                for (int j = 0; j < matrix[0].length / 2; j++) {// half col
                    int temp = matrix[i][j];
                    matrix[i][j] = matrix[i][length - 1 - j];
                    matrix[i][length - 1 - j] = temp;
                }
            }
        }
    }
    View Code
  • 相关阅读:
    Java线程:线程的交互
    Java线程:线程的同步与锁
    重载,继承,重写和多态的区别
    Java线程:线程状态的转换
    Java线程:线程栈模型与线程的变量
    Java线程:创建与启动
    Java线程:概念与原理
    Android上dip、dp、px、sp等单位说明
    Java学习之路:不走弯路,就是捷径
    谷歌大牛 Rob Pike 的 5 个编程原则
  • 原文地址:https://www.cnblogs.com/immiao0319/p/8459655.html
Copyright © 2011-2022 走看看