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

        共 3083字,需瀏覽 7分鐘

         ·

        2020-07-31 18:41


        導(dǎo)讀

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


        注:以下題目均來自LeetCode。

        Lee?tCod?e789# 逃脫阻礙者


        ??

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

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

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

        當(dāng)且僅當(dāng)你有可能成功逃脫時(shí),輸出 True。


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

        題目理解不難,實(shí)際上就是判斷游戲者是否比所有阻礙者都更接近目的地,當(dāng)然是在曼哈頓距離下的接近。所以程序?qū)崿F(xiàn)的核心即是判斷一個(gè)值比多個(gè)值都更小。想到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)鍵點(diǎn):

        • 曼哈頓距離求解

        • 列表推導(dǎo)式求解多個(gè)判斷結(jié)果

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



        LeetCode1347# 制造字母異位詞

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


        示例 1:?

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

        輸出:1

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


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

        構(gòu)造字母異位詞,實(shí)際上就相當(dāng)于以字符串s為基礎(chǔ),判斷t中有幾個(gè)和其不重疊的字符個(gè)數(shù),考慮用python自帶庫(kù)collections中的計(jì)數(shù)器Counter實(shí)現(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)鍵點(diǎn):

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

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

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



        LeetCode48# 旋轉(zhuǎn)圖像

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


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

        圖像的旋轉(zhuǎn)相當(dāng)于是對(duì)矩陣先轉(zhuǎn)置再左右翻轉(zhuǎn),而實(shí)現(xiàn)python中轉(zhuǎn)置則必然是用ZIP函數(shù),左右翻轉(zhuǎn)即是對(duì)列表逆序。
        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)鍵點(diǎn):
        • zip函數(shù)對(duì)嵌套列表實(shí)現(xiàn)"轉(zhuǎn)置"

        • 列表逆序操作

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



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

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


        示例:?

        s =?"abaccdeff"?

        返回 "b"?

        s =?""??

        返回?"?"?


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

        涉及到出現(xiàn)次數(shù),想到用Counter;要求找出第一個(gè)出現(xiàn),而Counter剛好保留出場(chǎng)順序,再加上必要的條件特判即可。
        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)鍵點(diǎn):
        • Counter實(shí)現(xiàn)計(jì)數(shù),并保留字符先后順序

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

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

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



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

        字符串的左旋轉(zhuǎn)操作是把字符串前面的若干個(gè)字符轉(zhuǎn)移到字符串的尾部。請(qǐng)定義一個(gè)函數(shù)實(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)置容器,但那個(gè)是inplace操作。直接對(duì)原字符串拼接,再?gòu)男D(zhuǎn)后目標(biāo)位置截取相應(yīng)長(zhǎng)度。
        1class?Solution:
        2????def?reverseLeftWords(self,?s:?str,?n:?int)?->?str:
        3????????return?(s+s)[n:n+len(s)]

        關(guān)鍵點(diǎn):
        • 字符串拼接實(shí)現(xiàn)擴(kuò)展

        • 左旋n個(gè)相當(dāng)于起始索引右移到n



        LeetCode914# 卡牌分組

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

        示例 1:?

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

        輸出:true

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


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

        本題還是比較難想的,需要數(shù)學(xué)知識(shí)作為支撐。因?yàn)橐笙嗤臄?shù)字分為一組而且還要統(tǒng)計(jì)不同計(jì)數(shù)間能否存在共同的分組大小,用counter;目標(biāo)是求可能分組大小越大越好,實(shí)際上是要找最大公約數(shù);有N個(gè)數(shù)字的計(jì)數(shù)那么就是N個(gè)計(jì)數(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)鍵點(diǎn):
        • counter實(shí)現(xiàn)計(jì)數(shù)

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

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




        強(qiáng)大的內(nèi)置庫(kù)、簡(jiǎn)潔的python語言!

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

        瀏覽 57
        點(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>
            激情五月天导航 | 国产精品大樱桃 | 天天爽夜夜爽人人爽 | 男人的天堂在线视频 | 日韩婷婷| 美女天天操 | 91精品国际| 一边脱一边吻一边摸 | 夜夜躁狠狠躁日日躁av | 来个操逼片 |