码迷,mamicode.com
首页 > 其他好文 > 详细

Rotate Image

时间:2015-03-10 12:02:32      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:

https://leetcode.com/problems/rotate-image/

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?

解题思路:

先写一个不是in-place的。多写几个例子,就能看出来旋转后的矩阵和原矩阵下标的关系就是:result[j][matrix.length - 1 - i] = matrix[i][j]。

还要注意最后如果写matrix = result是不能把matrix赋值的,因为java是pass by value。

public class Solution {
    public void rotate(int[][] matrix) {
        int[][] result = new int[matrix.length][matrix.length];
        for(int i = 0; i < matrix.length; i++){
            for(int j = 0; j < matrix.length; j++){
                result[j][matrix.length - 1 - i] = matrix[i][j];
            }
        }
        for(int i = 0; i < matrix.length; i++){
            for(int j = 0; j < matrix.length; j++){
                matrix[i][j] = result[i][j];
            }
        }
    }
}

 下面考虑in place的方法。我是没看出来,参考了其他网友的方法。

http://fisherlei.blogspot.jp/2013/01/leetcode-rotate-image.html

技术分享

思路就是,第一步,按照从左下到右上的对角线做对称,第二部,按照横向中线做对称即可。

public class Solution {
    public void rotate(int[][] matrix) {
        //先按从左下到右上的对角线做对称
        for(int i = 0; i < matrix.length; i++){
            for(int j = 0; j < matrix.length - i; j++){
                int temp = matrix[matrix.length - 1 - j][matrix.length - 1 - i];
                matrix[matrix.length - 1 - j][matrix.length - 1 - i] = matrix[i][j];
                matrix[i][j] = temp;
            }
        }
        
        //再按照横向的中心对称
        int start = 0;
        int end = matrix.length - 1;
        while(start < end){
            for(int i = 0; i < matrix.length; i++){
                int temp = matrix[start][i];
                matrix[start][i] = matrix[end][i];
                matrix[end][i] = temp;
            }
            start++;
            end--;
        }
    }
}

如果做逆时针变换,则是第一步,按照左上右下的对角线做对称,第二部还是按照横向中线做对称。

总结一下,这道题如果不in place,只要找出对应的index变换方程就行了,但是这里的方程不是swap,而是循环赋值。要求in place,就一定要找出swap的方法。没做出来,需要记住。

Rotate Image

标签:

原文地址:http://www.cnblogs.com/NickyYe/p/4325270.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!