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

LeetCode789# 逃脫阻礙者
你在進行一個簡化版的吃豆人游戲。你從 (0, 0) 點開始出發(fā),你的目的地是 (target[0], target[1]) 。地圖上有一些阻礙者,第 i 個阻礙者從 (ghosts[i][0], ghosts[i][1]) 出發(fā)。
每一回合,你和阻礙者們*可以*同時向東,西,南,北四個方向移動,每次可以移動到距離原位置1個單位的新位置。
如果你可以在任何阻礙者抓住你之前到達目的地(阻礙者可以采取任意行動方式),則被視為逃脫成功。如果你和阻礙者同時到達了一個位置(包括目的地)都不算是逃脫成功。
當且僅當你有可能成功逃脫時,輸出 True。
來源:力扣(LeetCode)789#逃脫阻礙者
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ù)
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)圖像
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)]
zip函數(shù)對嵌套列表實現(xiàn)"轉(zhuǎn)置"
列表逆序操作
嵌套列表的inplace需要用matrix[:]
LeetCode面試題50# 只出現(xiàn)1次字符
在字符串 s 中找出第一個只出現(xiàn)一次的字符。如果沒有,返回一個單空格。?
示例:?
s =?"abaccdeff"?
返回 "b"?
s =?""??
返回?"?"?
來源:力扣(LeetCode)面試題50. 第一個只出現(xiàn)一次的字符
1class?Solution:
2????def?firstUniqChar(self,?s:?str)?->?str:
3????????return?([k?for?k,?v?in?collections.Counter(s).items()?if?v==1]+['?'])[0]
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)字符串
1class?Solution:
2????def?reverseLeftWords(self,?s:?str,?n:?int)?->?str:
3????????return?(s+s)[n:n+len(s)]
字符串拼接實現(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. 卡牌分組
1class?Solution:
2????def?hasGroupsSizeX(self,?deck:?List[int])?->?bool:
3????????import?functools
4????????return?functools.reduce(math.gcd,?collections.Counter(deck).values())?>?1
counter實現(xiàn)計數(shù)
math.gcd實現(xiàn)求解最大公約數(shù)
reduce對列表中兩兩求解最大公約數(shù)
python爬蟲人工智能大數(shù)據(jù)公眾號

