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;
}
}
}
}
微信扫一扫
支付宝扫一扫