1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        ?LeetCode刷題實(shí)戰(zhàn)48:旋轉(zhuǎn)圖像

        共 2224字,需瀏覽 5分鐘

         ·

        2020-09-26 14:03

        算法的重要性,我就不多說了吧,想去大廠,就必須要經(jīng)過基礎(chǔ)知識(shí)和業(yè)務(wù)邏輯面試+算法面試。所以,為了提高大家的算法能力,這個(gè)公眾號(hào)后續(xù)每天帶大家做一道算法題,題目就從LeetCode上面選 !

        今天和大家聊的問題叫做?旋轉(zhuǎn)圖像,我們先來看題面:

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

        You are given an n x n 2D matrix representing an image, rotate the image by 90 degrees (clockwise).


        You have to rotate the image in-place, which means you have to modify the input 2D matrix directly. DO NOT allocate another 2D matrix and do the rotation.

        題意

        你必須在原地旋轉(zhuǎn)圖像,這意味著你需要直接修改輸入的二維矩陣。請不要使用另一個(gè)矩陣來旋轉(zhuǎn)圖像。

        樣例

        示例 1:

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

        原地旋轉(zhuǎn)輸入矩陣,使其變?yōu)?
        [
        ??[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]
        ],

        原地旋轉(zhuǎn)輸入矩陣,使其變?yōu)?
        [
        ??[15,13, 2, 5
        ],
        ??[14, 3, 4, 1],
        ??[12, 6, 8, 9],
        ??[16, 7,10,11]
        ]

        我們來看兩個(gè)動(dòng)態(tài)圖:

        題解

        https://www.cnblogs.com/techflow/p/12687271.html

        這個(gè)動(dòng)圖一看就明白了,也就是說我們需要將一個(gè)二維矩陣順時(shí)針旋轉(zhuǎn)90度。這個(gè)題意我們都很好理解,但是題目當(dāng)中還有一個(gè)限制條件:我們不能額外申請其他的數(shù)組來輔助,也就是對(duì)我們的空間利用進(jìn)行了限制。

        如果沒有這個(gè)條件限制其實(shí)很容易,我們只需要算出每一個(gè)坐標(biāo)旋轉(zhuǎn)之后的位置,我們重新創(chuàng)建一個(gè)數(shù)組然后依次填充就行了。

        我們忽略矩陣當(dāng)中具體的數(shù)據(jù),而來看看矩陣旋轉(zhuǎn)前后的坐標(biāo)變化。這是矩陣旋轉(zhuǎn)之前的坐標(biāo):

        旋轉(zhuǎn)之后,坐標(biāo)變成了:

        我們對(duì)照上面兩張圖觀察一下,可以看出對(duì)于坐標(biāo)(i, j)來說,它旋轉(zhuǎn)90度之后得到的結(jié)果應(yīng)該是(j, n-1-i)。這里的n是行數(shù)。

        我們有了這個(gè)式子之后,我們可以繼續(xù)推廣。我們發(fā)現(xiàn)(i, j)位置的點(diǎn)旋轉(zhuǎn)之后到了(j, n-1-i)。而(j, n-1-i)位置的點(diǎn)旋轉(zhuǎn)之后到了(n-1-i, n-1-j),同理(n-1-i, n-1-j)旋轉(zhuǎn)之后到了(n-1-j, i),最后我們發(fā)現(xiàn)(n-1-j, i)旋轉(zhuǎn)之后回到了(i, j)。

        也就是說對(duì)于一次旋轉(zhuǎn)來說,(i, j), (j,n-1-i), (n-1-i, n-1-j), (n-1-j, i)這四個(gè)位置的元素互相交換了位置,并沒有影響到其他位置。其實(shí)這個(gè)也是很容易想明白的,因?yàn)轭}目給定的是一個(gè)方陣。

        我們看下下圖就理解了:

        也就是說我們只需要遍歷矩陣四分之一的部分,然后通過坐標(biāo)拿到互相交換的4個(gè)位置,然后交換它們的元素即可。

        代碼

        代碼真的很簡單,只有幾行:

        class?Solution:
        ????def?rotate(self,?matrix:?List[List[int]])?->?None:
        ????????"""
        ????????Do?not?return?anything,?modify?matrix?in-place?instead.
        ????????"""

        ????????n?=?len(matrix)
        ????????
        ????????#?注意一下范圍和下標(biāo)即可
        ????????for?i?in?range(n//2):
        ????????????for?j?in?range(i,?n-1-i):
        ????????????????matrix[i][j],?matrix[j][n-1-i],?matrix[n-1-i][n-1-j],?matrix[n-1-j][i]?=?\
        ????????????????matrix[n-1-j][i],?matrix[i][j],?matrix[j][n-1-i],?matrix[n-1-i][n-1-j]
        好了,今天的文章就到這里,如果覺得有所收獲,請順手點(diǎn)個(gè)在看或者轉(zhuǎn)發(fā)吧,你們的支持是我最大的動(dòng)力。


        上期推文:


        LeetCode1-20題匯總,速度收藏!
        LeetCode21-40題匯總,速度收藏!
        LeetCode刷題實(shí)戰(zhàn)40:組合總和 II
        LeetCode刷題實(shí)戰(zhàn)41:缺失的第一個(gè)正數(shù)
        LeetCode刷題實(shí)戰(zhàn)42:接雨水
        LeetCode刷題實(shí)戰(zhàn)43:字符串相乘
        LeetCode刷題實(shí)戰(zhàn)44:通配符匹配
        LeetCode刷題實(shí)戰(zhàn)45:跳躍游戲 II
        LeetCode刷題實(shí)戰(zhàn)46:全排列
        LeetCode刷題實(shí)戰(zhàn)47:全排列 II


        瀏覽 28
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            激情五月综合色婷婷一 | 国产性爱一区二区三区 | 国产喷水福利 | 奇米影视黄色 | 原神色色网站 | 午夜美女福利视频 | 成人h视频免费观看 | 亚洲一区二区三区 | 美女操B网站 | 亚洲精品国产精华液 |