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

LeetCode789# 逃脫阻礙者
你在進(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#逃脫阻礙者
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ù)
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)圖像
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ù)對(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)一次的字符
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實(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)字符串
1class?Solution:
2????def?reverseLeftWords(self,?s:?str,?n:?int)?->?str:
3????????return?(s+s)[n:n+len(s)]
字符串拼接實(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. 卡牌分組
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實(shí)現(xiàn)計(jì)數(shù)
math.gcd實(shí)現(xiàn)求解最大公約數(shù)
reduce對(duì)列表中兩兩求解最大公約數(shù)
python爬蟲人工智能大數(shù)據(jù)公眾號(hào)

