日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【10】48. Rotate Image

發(fā)布時(shí)間:2024/6/21 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【10】48. Rotate Image 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

48. Rotate Image

  • Total Accepted:?96625
  • Total Submissions:?259249
  • Difficulty:?Medium
  • Contributors:?Admin

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?

Solution 1:

對于90度的翻轉(zhuǎn)有很多方法,一步或多步都可以解,我們先來看一種直接的方法,對于當(dāng)前位置,計(jì)算旋轉(zhuǎn)后的新位置,然后再計(jì)算下一個(gè)新位置,第四個(gè)位置又變成當(dāng)前位置了,所以這個(gè)方法每次循環(huán)換四個(gè)數(shù)字,如下所示:

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

1 class Solution { 2 public: 3 void rotate(vector<vector<int>>& matrix) { 4 int n = matrix.size(); 5 for(int i = 0; i < n / 2; i++){ 6 for(int j = i; j < n - 1 - i; j++){ 7 int tmp = matrix[i][j]; 8 matrix[i][j] = matrix[n - 1 - j][i]; 9 matrix[n - 1 - j][i] = matrix[n - 1 - i][n - 1 - j]; 10 matrix[n - 1 - i][n - 1 - j] = matrix[j][n - 1 - i]; 11 matrix[j][n - 1 - i] = tmp; 12 } 13 } 14 } 15 };

Solution 2:

還有一種解法,首先以從對角線為軸翻轉(zhuǎn),然后再以x軸中線上下翻轉(zhuǎn)即可得到結(jié)果,如下圖所示(其中藍(lán)色數(shù)字表示翻轉(zhuǎn)軸):

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

1 class Solution { 2 public: 3 void rotate(vector<vector<int>>& matrix) { 4 int n = matrix.size(); 5 for(int i = 0; i < n - 1; i++){//i只能取到 n - 2, 因?yàn)閚 - 1是對稱軸 6 for(int j = 0; j < n - 1 - i; j++){//j只能取到n - 1 - i, 在對稱軸的左邊 7 swap(matrix[i][j], matrix[n - 1 - j][n - 1 - i]); 8 } 9 } 10 for(int i = 0; i < n / 2; i++){//i只能取到橫向中間軸的上面 11 for(int j = 0; j < n; j++){//j可以取到所有值 12 swap(matrix[i][j], matrix[n - 1 - i][j]);//按橫向軸翻轉(zhuǎn),j不變;i變?yōu)閚-1-i 13 } 14 } 15 } 16 };

?

Solution 3:

最后再來看一種方法,這種方法首先對原數(shù)組取其轉(zhuǎn)置矩陣,然后把每行的數(shù)字翻轉(zhuǎn)可得到結(jié)果,如下所示(其中藍(lán)色數(shù)字表示翻轉(zhuǎn)軸):

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

1 class Solution { 2 public: 3 void rotate(vector<vector<int>>& matrix) { 4 int n = matrix.size(); 5 for(int i = 0; i < n; i++){ 6 for(int j = i + 1; j < n; j++){//j取i - 1, 因?yàn)閷ΨQ軸是(i,i) 7 swap(matrix[i][j], matrix[j][i]); 8 } 9 reverse(matrix[i].begin(), matrix[i].end());//按豎向中軸線翻轉(zhuǎn) 直接按行reverse即可 10 } 11 } 12 };

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/93scarlett/p/6362085.html

總結(jié)

以上是生活随笔為你收集整理的【10】48. Rotate Image的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。