LeetCode – 48. Rotate Image

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;
            }
        }
    }
}

喜欢的话订阅一个呗~第一时间收到文章更新哟~

发表评论

电子邮件地址不会被公开。