You are given an n x n 2D matrix representing an image.
Rotate the image by 90 degrees (clockwise).
这道题看似很复杂,其实就是数组的切换,但是实现起来也并不是非常容易,需要非常小心的操作。
我之前用javascript解过这道题,用的方法比较取巧。是找规律然后变更(估计很多人看不懂),先贴出来
/** * @param {number[][]} matrix * @return {void} Do not return anything, modify matrix in-place instead. */ var rotate = function(matrix) { var res = JSON.parse(JSON.stringify(matrix)); n = matrix.length; if(matrix.length == 0 || matrix.length != matrix[0].length){ return false; } for(i=0;i<n;i++){ for(j=n-1;j>-1;j--){ matrix[i][n-j-1] = res[j][i]; } } };
这道题网上基本上有两种解法:对角线对换以及一层层剥洋葱。前者比较代码较少,但是很容易脑子卡壳。后者比较清晰易懂,真的面试的时候如果想不清楚了,画个图就出来了。
public class Solution { public void rotate(int[][] matrix) { int layer = matrix.length /2; for(int i=0;i<layer;i++){ for(int j=i;j<matrix.length-1-i;j++){ int tmp = matrix[i][j]; matrix[i][j] = matrix[matrix.length-1-j][i]; matrix[matrix.length-1-j][i] = matrix[matrix.length-1-i][matrix.length-1-j]; matrix[matrix.length-1-i][matrix.length-1-j] = matrix[j][matrix.length-1-i]; matrix[j][matrix.length-1-i] = tmp; } } } }