<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中,python一行代碼能干啥?

          共 3083字,需瀏覽 7分鐘

           ·

          2020-07-31 18:41


          導讀

          都說python語言簡潔、集成高效,一行代碼往往能實現(xiàn)很多復(fù)雜的操作,比如兩變量交換、心形輸出、打印乘法口訣等等。但這些總歸還是不太實用。那么我們換做在LeetCode中,看看用python一行代碼都能解決什么問題。


          注:以下題目均來自LeetCode。

          Lee?tCod?e789# 逃脫阻礙者


          ??

          你在進行一個簡化版的吃豆人游戲。你從 (0, 0) 點開始出發(fā),你的目的地是 (target[0], target[1]) 。地圖上有一些阻礙者,第 i 個阻礙者從 (ghosts[i][0], ghosts[i][1]) 出發(fā)。

          每一回合,你和阻礙者們*可以*同時向東,西,南,北四個方向移動,每次可以移動到距離原位置1個單位的新位置。

          如果你可以在任何阻礙者抓住你之前到達目的地(阻礙者可以采取任意行動方式),則被視為逃脫成功。如果你和阻礙者同時到達了一個位置(包括目的地)都不算是逃脫成功。

          當且僅當你有可能成功逃脫時,輸出 True。


          來源:力扣(LeetCode)789#逃脫阻礙者

          題目理解不難,實際上就是判斷游戲者是否比所有阻礙者都更接近目的地,當然是在曼哈頓距離下的接近。所以程序?qū)崿F(xiàn)的核心即是判斷一個值比多個值都更小。想到all函數(shù)的用法。
          1class?Solution:
          2????def?escapeGhosts(self,?ghosts:?List[List[int]],?target:?List[int])?->?bool:
          3????????return?all([abs(target[0])+abs(target[1])?0]-target[0])+abs(ghost[1]-target[1])?for?ghost?in?ghosts])


          關(guān)鍵點:

          • 曼哈頓距離求解

          • 列表推導式求解多個判斷結(jié)果

          • all函數(shù)對多個邏輯結(jié)果判斷



          LeetCode1347# 制造字母異位詞

          給你兩個長度相等的字符串 s 和 t。每一個步驟中,你可以選擇將 t 中的?任一字符?替換為?另一個字符。返回使 t 成為 s 的字母異位詞的最小步驟數(shù)。字母異位詞?指字母相同,但排列不同的字符串。??


          示例 1:?

          輸出:s =?"bab", t =?"aba"?

          輸出:1

          提示:用?'b'?替換 t 中的第一個?'a',t =?"bba"?是 s 的一個字母異位詞。?


          來源:力扣(LeetCode)1347#制造字母異位詞的最小步驟數(shù)

          構(gòu)造字母異位詞,實際上就相當于以字符串s為基礎(chǔ),判斷t中有幾個和其不重疊的字符個數(shù),考慮用python自帶庫collections中的計數(shù)器Counter實現(xiàn)。
          1class?Solution:
          2????def?minSteps(self,?s:?str,?t:?str)?->?int:
          3????????return?sum((collections.Counter(s)?-?collections.Counter(t)).values())


          關(guān)鍵點:

          • Counter計數(shù)器可以實現(xiàn)字符計數(shù)功能

          • Counter類減法中,以前者為基數(shù),且僅保留正數(shù)部分(即前面沒有的而后面獨有的,減法不保留)

          • sum求和計數(shù)器之差



          LeetCode48# 旋轉(zhuǎn)圖像

          給定一個 n × n 的二維矩陣表示一個圖像。將圖像順時針旋轉(zhuǎn) 90?度。?說明:你必須在原地旋轉(zhuǎn)圖像,這意味著你需要直接修改輸入的二維矩陣。請不要使用另一個矩陣來旋轉(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] ]?


          來源:力扣(LeetCode)48#旋轉(zhuǎn)圖像

          圖像的旋轉(zhuǎn)相當于是對矩陣先轉(zhuǎn)置再左右翻轉(zhuǎn),而實現(xiàn)python中轉(zhuǎn)置則必然是用ZIP函數(shù),左右翻轉(zhuǎn)即是對列表逆序。
          1class?Solution:
          2????def?rotate(self,?matrix:?List[List[int]])?->?None:
          3????????"""
          4????????Do?not?return?anything,?modify?matrix?in-place?instead.
          5????????"""

          6????????matrix[:]?=?[lyst[::-1]?for?lyst?in?zip(*matrix)]

          關(guān)鍵點:
          • zip函數(shù)對嵌套列表實現(xiàn)"轉(zhuǎn)置"

          • 列表逆序操作

          • 嵌套列表的inplace需要用matrix[:]



          LeetCode面試題50# 只出現(xiàn)1次字符

          在字符串 s 中找出第一個只出現(xiàn)一次的字符。如果沒有,返回一個單空格。?


          示例:?

          s =?"abaccdeff"?

          返回 "b"?

          s =?""??

          返回?"?"?


          來源:力扣(LeetCode)面試題50. 第一個只出現(xiàn)一次的字符

          涉及到出現(xiàn)次數(shù),想到用Counter;要求找出第一個出現(xiàn),而Counter剛好保留出場順序,再加上必要的條件特判即可。
          1class?Solution:
          2????def?firstUniqChar(self,?s:?str)?->?str:
          3????????return?([k?for?k,?v?in?collections.Counter(s).items()?if?v==1]+['?'])[0]

          關(guān)鍵點:
          • Counter實現(xiàn)計數(shù),并保留字符先后順序

          • 列表推導式篩選僅出現(xiàn)1次字符

          • 加一個空格字符列表避免結(jié)果為空

          • 輸出第一個結(jié)果



          LeetCode面試題58#?左旋轉(zhuǎn)字符串

          字符串的左旋轉(zhuǎn)操作是把字符串前面的若干個字符轉(zhuǎn)移到字符串的尾部。請定義一個函數(shù)實現(xiàn)字符串左旋轉(zhuǎn)操作的功能。比如,輸入字符串"abcdefg"和數(shù)字2,該函數(shù)將返回左旋轉(zhuǎn)兩位得到的結(jié)果"cdefgab"。??

          示例 1:?

          輸入: s =?"abcdefg", k = 2?

          輸出:?"cdefgab"?


          來源:力扣(LeetCode)面試題58 - II. 左旋轉(zhuǎn)字符串

          提到旋轉(zhuǎn),可以想到用collections模塊中deque的rotate接口(參考Python內(nèi)置容器,但那個是inplace操作。直接對原字符串拼接,再從旋轉(zhuǎn)后目標位置截取相應(yīng)長度。
          1class?Solution:
          2????def?reverseLeftWords(self,?s:?str,?n:?int)?->?str:
          3????????return?(s+s)[n:n+len(s)]

          關(guān)鍵點:
          • 字符串拼接實現(xiàn)擴展

          • 左旋n個相當于起始索引右移到n



          LeetCode914# 卡牌分組

          給定一副牌,每張牌上都寫著一個整數(shù)。此時,你需要選定一個數(shù)字 X,使我們可以將整副牌按下述規(guī)則分成 1 組或更多組:每組都有 X 張牌。組內(nèi)所有的牌上都寫著相同的整數(shù)。僅當你可選的 X >= 2 時返回 true。??

          示例 1:?

          輸入:[1,2,3,4,4,3,2,1]?

          輸出:true

          解釋:可行的分組是?[1,1],[2,2],[3,3],[4,4]?


          來源:力扣(LeetCode)914. 卡牌分組

          本題還是比較難想的,需要數(shù)學知識作為支撐。因為要求相同的數(shù)字分為一組而且還要統(tǒng)計不同計數(shù)間能否存在共同的分組大小,用counter;目標是求可能分組大小越大越好,實際上是要找最大公約數(shù);有N個數(shù)字的計數(shù)那么就是N個計數(shù)的最大公約數(shù)。
          1class?Solution:
          2????def?hasGroupsSizeX(self,?deck:?List[int])?->?bool:
          3????????import?functools
          4????????return?functools.reduce(math.gcd,?collections.Counter(deck).values())?>?1

          關(guān)鍵點:
          • counter實現(xiàn)計數(shù)

          • math.gcd實現(xiàn)求解最大公約數(shù)

          • reduce對列表中兩兩求解最大公約數(shù)




          強大的內(nèi)置庫、簡潔的python語言!

          python爬蟲人工智能大數(shù)據(jù)公眾號

          瀏覽 57
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  学生妹内射 | 欧美逼网 | 亚洲精品久久久日产欧美蜜桃 | 特大黄片视屏 | 欧美 高潮喷高清 |