现在的位置: 首页 > 综合 > 正文

leetcode——Rotate Image

2018年04月12日 ⁄ 综合 ⁄ 共 873字 ⁄ 字号 评论关闭

题目:

You are given an n x n 2D matrix representing an image.

Rotate the image by 90 degrees (clockwise).

Follow up:

Could you do this in-place?

思路:

首先,要求原地调整,那么需要寻找变换规律。举个例子:

对于3x3的矩阵,如顺时针调整(0,0)->(0,2)->(2,2)->(2,0)

对于4x4的矩阵,如顺时针调整(0,0)->(0,3)->(3,3)->(3,0);(0,1)->(1,3)->(3,2)->(2,0);(0,2)->(2,3)->(3,1)->(1,0).

转换传递规律:对于一个nxn矩阵来说,(a,b)->(b,n-1 - a),并且该链式传递转换有四部。

当矩阵最外一层转换完之后,向内进发一层,继续转换。

如下代码中:for循环结束时,是该层一圈的所有点转换完成。然后修改n和start,使得开始点向内一圈再次进行传递转换。

AC代码:

public void rotate(int[][] matrix) {
        if(matrix==null || matrix.length==0)
            return;
        int n = matrix.length;
        int start = 0;
        while(n>1){

            for(int i=start;i<matrix.length-1-start;i++){
                int tmp = matrix[start][i];
                matrix[start][i] = matrix[matrix.length-1 - i][start];
                matrix[matrix.length-1-i][start] = matrix[matrix.length-1 - start][matrix.length-1-i];
                matrix[matrix.length-1 - start][matrix.length-1-i] = matrix[i][matrix.length-1-start];
                matrix[i][matrix.length-1-start]= tmp;
            }
            n-=2;
            start++;
        }
    }

抱歉!评论已关闭.