首页 > 代码库 > [LeetCode]48 Rotate Image

[LeetCode]48 Rotate Image

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

http://blog.csdn.net/linhuanmars/article/details/21503683

public class Solution {
    
    // Assume it is a n * n.
    public void rotate(int[][] matrix) 
    {
        // Solution A:
        // rotate_ExtraMatrix(matrix);
        
        // Solution B:
        rotate_TwoRotate(matrix);
    }
    
    ////////////////////
    // Solution A: ExtraMatrix
    //
    private void rotate_ExtraMatrix(int[][] matrix)
    {
        int len = matrix.length;
        int[][] toReturn = new int[len][len];
        
        // Rotate
        for (int i = 0 ; i < len ; i ++)
        {
            for (int j = 0 ; j < len ; j ++)
            {
                toReturn[i][j] = matrix[len - 1 - j][i];
            }
        }
        
        // Copy
        for (int i = 0 ; i < len ; i ++)
        {
            for (int j = 0 ; j < len ; j ++)
            {
                matrix[i][j] = toReturn[i][j];
            }
        }
    }

    ////////////////////
    // Solution B: TwoRotate
    //    
    private void rotate_TwoRotate(int[][] matrix)
    {
        // AAAAA
        // BBBBB
        // CCCCC
        //
        // =>
        //
        // CCCCC
        // BBBBB
        // AAAAA
        int len = matrix.length;
        int mid = len / 2;
        for (int i = 0 ; i < len ; i ++)
        {
            for (int j = 0 ; j < mid ; j ++)
            {
                int temp = matrix[len - 1 - j][i];
                matrix[len - 1 - j][i] = matrix[j][i];
                matrix[j][i] = temp;
            }
        }
        
        // Swap corner
        // M A A A
        // B M A A
        // B B M A
        // B B B M
        //
        // =>
        // M B B B
        // A M B B
        // A A M B
        // A A A M
        for (int j = 0 ; j < len ; j ++)
        {
            for (int i = 0 ; i < j ; i ++)
            {
                int temp = matrix[i][j];
                matrix[i][j] = matrix[j][i];
                matrix[j][i] = temp;
            }
        }
    } 
}


[LeetCode]48 Rotate Image