<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【一天一道Leetcode】螺旋矩陣

          共 1883字,需瀏覽 4分鐘

           ·

          2021-04-04 01:32


          本篇推文共計2000個字,閱讀時間約3分鐘。



          01


          題目描述


          題目描述:


          給你一個m行n列的矩陣matrix,

          請按照順時針螺旋順序,返回矩陣中的所有元素。


          如下面的示例:



          輸入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
          輸出:[1,2,3,6,9,8,7,4,5]




          輸入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
          輸出:[1,2,3,4,8,12,11,10,9,5,6,7]


          提示:

          1. m == matrix.length

          2. n == matrix[i].length

          3. 1 <= m, n <= 10

          4. -100 <= matrix[i][j] <= 100




          02


          方法和思路


          由題意可知,整個矩陣需要螺旋打開,

          更直白的表述可以說像現實中的蛋糕卷一樣,

          進行平鋪展開。


           

          這個過程中最難的是需要讓矩陣判斷出90度的拐角

          碰到90度拐角的時候,進行旋轉90度操作

           




          這個時候不得不提到Python的zip內置函數


          zip()函數用于將可迭代的對象作為參數,將對象中對應的元素打包成元組,然后返回由這些元組的對象,這樣做的好處是節(jié)約了不少的內存。


          我們可以使用list()轉換來輸出列表。

          利用*號操作符,可以將元組解壓為列表。


          簡單點來說,zip函數可以實現矩陣轉置的功能。


          例如下面的這個案例:

          input=[(1,2,3), (4,5,6), (7,8,9)]
          print("原始數組輸入:",input)
          print("轉置數組輸出:",list(zip(*input)))


          輸出為:





          另外一方面:

          matrix[::-1]可以實現矩陣繞水平對稱軸做對稱操作,


          例如下面的這個案例:

          input=[(1,2,3), (4,5,6), (7,8,9)]
          output=input[::-1]
          print("原始數組輸入:",input)
          print("對稱數組輸出:",output)


          輸出為:





          我們發(fā)現zip內置函數matrix[::-1]對稱,

          兩個操作加起來就是順時針轉90度。


          例如下面的這個案例:

          input=[(1,2,3), (4,5,6), (7,8,9)]
          output=list(zip(*input))[::-1]
          print("原始數組輸入:",input)
          print("對稱數組輸出:",output)


          輸出為:


          結合矩陣圖,我們可以看到:



          zip內置函數matrix[::-1]對稱,

          可以實現順時針旋轉90度。





          通過上述方法,就處理好了順時針90度旋轉的問題。


          同時新建一個新數組,

          用于存儲經過順時針90度旋轉得到的數。

          最后矩陣展開的最后結果就是新數組的輸出。





          我們用代碼表示此題的解法如下:

          class Solution(object):
              def spiralOrder(self, matrix):
                  new=[]
                  while matrix:
                      new+=matrix[0]
                      matrix=list(zip(*(matrix[1:])))[::-1]
                  return new




          往期回顧

          【年終總結】你好2021,再見2020。


          【快速寫好畢業(yè)論文】你不得不知曉的七個常用文獻搜索平臺


          【秋招紀實錄】一篇特別正經的【騰訊】求職經驗分享


          【一天一道Leetcode】回文字符串-最少分割次數


          【一天一道Leetcode】合并兩個有序鏈表


          【一天一道Leetcode】套信封問題



          ☆ END ☆

          你與世界

          只差一個

          公眾號

          瀏覽 40
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  麻豆成人视频在线观看 | 蜜桃在线无码视频 | 日本特黄 AA片免费视频 | 欧美特级黄片在线播放 | 亚洲成人影音先锋 |