[抄题]:
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; } } } }