1. 程式人生 > >LeetCode 48 旋轉影象

LeetCode 48 旋轉影象

給定一個 × n 的二維矩陣表示一個影象。

將影象順時針旋轉 90 度。

說明:

你必須在原地旋轉影象,這意味著你需要直接修改輸入的二維矩陣。請不要使用另一個矩陣來旋轉影象。

示例 1:

給定 matrix = 
[
  [1,2,3],
  [4,5,6],
  [7,8,9]
],

原地旋轉輸入矩陣,使其變為:
[
  [7,4,1],
  [8,5,2],
  [9,6,3]
]

示例 2:

給定 matrix =
[
  [ 5, 1, 9,11],
  [ 2, 4, 8,10],
  [13, 3, 6, 7],
  [15,14,12,16]
], 

原地旋轉輸入矩陣,使其變為:
[
  [15,13, 2, 5],
  [14, 3, 4, 1],
  [12, 6, 8, 9],
  [16, 7,10,11]
]

在計算機影象處理裡,旋轉圖片是很常見的,由於圖片的本質是二維陣列,所以也就變成了對陣列的操作處理,翻轉的本質就是某個位置上數移動到另一個位置上,比如用一個簡單的例子來分析:

1  2  3       7  4  1 

4  5  6  -->   8  5  2  

7  8  9       9  6  3

對於90度的翻轉有很多方法,一步或多步都可以解,我們先來看一種直接的方法,對於當前位置,計算旋轉後的新位置,然後再計算下一個新位置,第四個位置又變成當前位置了,所以這個方法每次迴圈換四個數字,如下所示:

1  2  3                 7  2  1                  7  4  1

4  5  6      -->      4  5  6   -->    8  5  2  

7  8  9                 9  8  3      9  6  3

解法一

class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
        int n = matrix.size();
        for(int i=0;i<n/2;i++)  //控制層
            for(int j=i;j<n-1-i;j++)  //內部交換
            {
                int tmp =  matrix[i][j];
                matrix[i][j] = matrix[n-j-1][i];
                matrix[n - 1 - j][i] = matrix[n - 1 - i][n - 1 - j];
                matrix[n - 1 - i][n - 1 - j] = matrix[j][n - 1 - i];
                matrix[j][n - 1 - i] = tmp;
            }
        
        
    }
};

還有一種解法,首先以從對角線為軸翻轉,然後再以x軸中線上下翻轉即可得到結果,如下圖所示(其中藍色數字表示翻轉軸):

1  2  3       9  6  3       7  4  1

4  5  6  -->   8  5  2   -->     8  5  2  

7  8  9       7  4  1       9  6  3

class Solution {
public:
    void rotate(vector<vector<int> > &matrix) {
        int n = matrix.size();
        for (int i = 0; i < n - 1; ++i) {
            for (int j = 0; j < n - i; ++j) {
                swap(matrix[i][j], matrix[n - 1- j][n - 1 - i]);
            }
        }
        for (int i = 0; i < n / 2; ++i) {
            for (int j = 0; j < n; ++j) {
                swap(matrix[i][j], matrix[n - 1 - i][j]);
            }
        }
    }
};

最後再來看一種方法,這種方法首先對原陣列取其轉置矩陣,然後把每行的數字翻轉可得到結果,如下所示(其中藍色數字表示翻轉軸):

1  2  3       1  4  7       7  4  1

4  5  6  -->   2  5  8   -->     8  5  2  

7  8  9       3  6  9          9  6  3

解法三

class Solution {
public:
    void rotate(vector<vector<int> > &matrix) {
        int n = matrix.size();
        for (int i = 0; i < n; ++i) {
            for (int j = i + 1; j < n; ++j) {
                swap(matrix[i][j], matrix[j][i]);
            }
            reverse(matrix[i].begin(), matrix[i].end());
        }
    }
};

相關推薦

LeetCode : 48. 旋轉影象(Rotate Image)解答

48. 旋轉影象 給定一個 n × n 的二維矩陣表示一個影象。 將影象順時針旋轉 90 度。 說明: 你必須在 原地 旋轉影象,這意味著你需要直接修改輸入的二維矩陣。請不要 使用另一個矩陣來旋轉影象。 示例 1: 給定 matrix = [  

leetcode 48:旋轉影象

先對角線的對換  然後列對換 void rotate(std::vector<std::vector<int>>& matrix) { int num=matrix.size()-1; int temp=0; for(int

leetcode-48 旋轉影象

給定一個 n × n 的二維矩陣表示一個影象。 將影象順時針旋轉 90 度。 說明: 你必須在原地旋轉影象,這意味著你需要直接修改輸入的二維矩陣。請不要使用另一個矩陣來旋轉影象。 示例 : 給定 matrix = [ [1,2,3], [4,5,6],

LeetCode 48.旋轉影象(C++)

給定一個 n × n 的二維矩陣表示一個影象。 將影象順時針旋轉 90 度。 說明: 你必須在原地旋轉影象,這意味著你需要直接修改輸入的二維矩陣。請不要使用另一個矩陣來旋轉影象。 示例 1:

LeetCode 48 旋轉影象

給定一個 n × n 的二維矩陣表示一個影象。 將影象順時針旋轉 90 度。 說明: 你必須在原地旋轉影象,這意味著你需要直接修改輸入的二維矩陣。請不要使用另一個矩陣來旋轉影象。 示例 1: 給定 matrix = [ [1,2,3], [4,5,6],

LeetCode48. 旋轉影象

題目連結:https://leetcode-cn.com/problems/rotate-image/description/ 題目描述 給定一個 n × n 的二維矩陣表示一個影象。 將影象順時針旋轉 90 度。 說明: 你必須在原地旋轉影象,這意味著你需要直接修改輸入

Leetcode演算法Java全解答--48.旋轉影象(Rotate Image)

Leetcode演算法Java全解答–48.旋轉影象(Rotate Image) 文章目錄 Leetcode演算法Java全解答--48.旋轉影象(Rotate Image) 題目 想法 結果 總結 程式碼

LeetCode:【48. 旋轉影象

題目給定一個 n × n 的二維矩陣表示一個影象。將影象旋轉 90 度(順時針)。注意:你必須在原矩陣中旋轉影象,請不要使用另一個矩陣來旋轉影象。例 1:給出的輸入矩陣 = [ [1,2,3], [4,5,6], [7,8,9] ], 旋轉輸入矩陣,使其變為

LeetCode 48. 旋轉圖像(Rotate Image)

return leetcode 二維 get lee 圖像 代碼 必須 tps 題目描述 給定一個 n × n 的二維矩陣表示一個圖像。 將圖像順時針旋轉 90 度。 說明: 你必須在原地旋轉圖像,這意味著你需要直接修改輸入的二維矩陣。請不要使用另一個矩陣來旋轉圖像。

LeetCode題目--旋轉影象(python實現)

題目 給定一個 n × n 的二維矩陣表示一個影象。 將影象順時針旋轉 90 度。 說明: 你必須在原地旋轉影象,這意味著你需要直接修改輸入的二維矩陣。請不要使用另一個矩陣來旋轉影象。 示例 1: 給定 matrix =

Leetcode 48.旋轉矩陣

旋轉矩陣 給定一個 n × n 的二維矩陣表示一個影象。 將影象順時針旋轉 90 度。 說明: 你必須在原地旋轉影象,這意味著你需要直接修改輸入的二維矩陣。請不要使用另一個矩陣來旋轉影象。 示例 1: 給定 matrix = [ [1,2,3], [4

48. 旋轉影象(JavaScript)

給定一個 n × n 的二維矩陣表示一個影象。 將影象順時針旋轉 90 度。 說明: 你必須在原地旋轉影象,這意味著你需要直接修改輸入的二維矩陣。請不要使用另一個矩陣來旋轉影象。 示例 1: 給定 matrix = [ [1,2,3], [4,5,6],

leetcode-48.旋轉圖像

tco back end tar tps 鏡像 -a class lee leetcode-48.旋轉圖像 point: 數組 題意 給定一個 n × n 的二維矩陣表示一個圖像。 將圖像順時針旋轉 90 度。 說明: 你必須在原地旋轉圖像,這意味著你需要直接修改輸入的二

leetcode 48. 旋轉圖像(Rotate Image)

++ leetcode .com 題目 順時針 http baidu https leet 目錄 題目描述: 示例 1: 示例 2: 解法:

Leetcode 48旋轉影象(最詳細的解法!!!)

給定一個 n × n 的二維矩陣表示一個影象。 將影象順時針旋轉 90 度。 說明: 你必須在原地旋轉影象,這意味著你需要直接修改輸入的二維矩陣。請不要使用另一個矩陣來旋轉影象。 示例 1: 給定 ma

leetcode】#陣列【Python】48. Rotate Image 旋轉影象

連結: 題目: 給定一個 n × n 的二維矩陣表示一個影象。 將影象順時針旋轉 90 度。 說明: 你必須在原地旋轉影象,這意味著你需要直接修改輸入的二維矩陣。請不要使用另一個矩陣來旋轉影象。 示

LeetCode演算法題48旋轉影象解析

給定一個 n × n 的二維矩陣表示一個影象。 將影象順時針旋轉 90 度。 說明: 你必須在原地旋轉影象,這意味著你需要直接修改輸入的二維矩陣。請不要使用另一個矩陣來旋轉影象。 示例 1: 給定 matrix = [ [1,2,3], [4,5,6], [

leetCode 48.Rotate Image (旋轉影象) 解題思路和方法

Rotate Image You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees

LeetCode 48. Rotate Image(旋轉圖像)

this i++ 目標 gree ota ++ right 個數 方法 You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). F

swift 旋轉影象 LeetCode

給定一個 n × n 的二維矩陣表示一個影象。 將影象順時針旋轉 90 度。 說明: 你必須在原地旋轉影象,這意味著你需要直接修改輸入的二維矩陣。請不要使用另一個矩陣來旋轉影象。 class Solution { func rotate