LeetCode:Rotate Image - 將矩陣順時針旋轉90°

一、題目名稱java

Rotate Image(將矩陣順時針旋轉90°)code

二、題目地址圖片

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

三、題目內容get

英文:io

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

Rotate the image by 90 degrees (clockwise).方法

中文:im

現有一張圖片保存在n×n大小的二維矩陣中。將它延順時針方向旋轉90度。英文

四、解題方法1

第一種方法,是先將原矩陣複製到另外一個矩陣中,再從另外一個矩陣的對應位置將值賦到原矩陣中矩陣旋轉90°後的位置上。

Java代碼以下:

/**
 * 順時針旋轉矩陣
 * @文件名稱 Solution.java
 * @文件做者 Tsybius2014
 * @建立時間 2016年4月15日 下午3:55:55
 */
public class Solution {
    /**
     * 順時針旋轉矩陣
     * @param matrix 矩陣
     */
    public void rotate(int[][] matrix) {
        //空矩陣不處理
        if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
            return;
        }
        //矩陣的高和寬
        int height = matrix.length;
        int width = matrix[0].length;
        //高與寬必須一致
        if (height != width) {
            return;
        }
        //矩陣邊長
        int len = height;
        //旋轉矩陣
        //System.out.println("開始旋轉");
        //複製一個新矩陣
        int[][] matrixTmp = new int[len][len];
        for (int i = 0; i < len; i++) {
            for (int j = 0; j < len; j++) {
                matrixTmp[i][j] = matrix[i][j];
            }
        }
        //根據新矩陣計算老矩陣每一個元素旋轉後的值
        for (int i = 0; i < len; i++) {
            for (int j = 0; j < len; j++) {
                matrix[i][j] = matrixTmp[len - j - 1][i];
            }
        }
        //System.out.println("旋轉完畢");
    }
}

五、解題方法2

第二種方法無須創建一個新矩陣,一次能夠旋轉4個點。

下圖以5×5矩陣爲例,紅色的圈表明考慮要旋轉一輪的點,綠色以點(0, 1)爲例,說明每輪旋轉的方向。

實現此方法的Java代碼以下:

/**
 * 順時針旋轉矩陣
 * @文件名稱 Solution.java
 * @文件做者 Tsybius2014
 * @建立時間 2016年4月15日 下午3:55:55
 */
public class Solution {
    /**
     * 順時針旋轉矩陣
     * @param matrix 矩陣
     */
    public void rotate(int[][] matrix) {
        //空矩陣不處理
        if (matrix == null || matrix.length == 0 || matrix[0].length == 0) {
            return;
        }
        //矩陣的高和寬
        int height = matrix.length;
        int width = matrix[0].length;
        //高與寬必須一致
        if (height != width) {
            return;
        }
        //矩陣邊長
        int len = height;
        //旋轉矩陣
        //System.out.println("開始旋轉");
        int temp = 0;
        for (int i = 0; i < len / 2; i++) {
            for (int j = i; j < len - i - 1; j++) {
                temp = matrix[i][j];
                matrix[i][j] = matrix[len - j - 1][i];
                matrix[len - j - 1][i] = matrix[len - i - 1][len - j - 1];
                matrix[len - i - 1][len - j - 1] = matrix[j][len - i - 1];
                matrix[j][len - i - 1] = temp;
            }
        }
        //System.out.println("旋轉完畢");
    }
}

END

相關文章
相關標籤/搜索