Python練手:一行Python解Leetcode習(xí)題

一行Python解Leetcode習(xí)題

語法簡(jiǎn)單,提供大量開箱即用的工具是Python語言的一大特點(diǎn),也是其受歡迎的重要特點(diǎn)。所謂“人生苦短腻贰,我用Python”,并不是說Python比其他語言性能好扒秸、也不是說Python比其它語言優(yōu)秀银受,而是說它方便,易用鸦采,可用于思路驗(yàn)證、原型實(shí)現(xiàn)咕幻,也可用于快速開發(fā)渔伯;其開發(fā)效率高的特點(diǎn)使其的網(wǎng)絡(luò)編程、爬蟲和數(shù)據(jù)開發(fā)領(lǐng)域極受歡迎肄程。
知乎上甚至有專門的話題討論一行Python能干什么锣吼,話題下的回答有的令人大開眼界,也有的強(qiáng)行一行蓝厌。受到話題啟發(fā)玄叠,在此不完全歸納Leetcode上的能用一行Python代碼解出的習(xí)題。

學(xué)習(xí)Python中的小伙伴拓提,需要學(xué)習(xí)資料的話读恃,可以到我的微信公眾號(hào):Python學(xué)習(xí)知識(shí)圈,后臺(tái)回復(fù):“01”代态,即可拿Python學(xué)習(xí)資料

什么是Leetcode

Leetcode被稱為程序員最喜愛的網(wǎng)站之一寺惫,其主要功能是提供了一個(gè)方便、便捷的程序員做題平臺(tái)”囊桑現(xiàn)在已經(jīng)有中文網(wǎng)站:https://leetcode-cn.com西雀。

什么樣的代碼能稱為一行解題

Leetcode中,Python解題一般是給定一個(gè)Solution類歉摧,給定一個(gè)類方法艇肴,要求你填寫方法體腔呜。如果方法體中只有一行代碼,則稱為用一行代碼解了該題再悼。
讓我們開始看題吧核畴!

349 兩個(gè)數(shù)組的交集

給定兩個(gè)數(shù)組,編寫一個(gè)函數(shù)來計(jì)算它們的交集帮哈。

示例 1:

輸入: nums1 = [1,2,2,1], nums2 = [2,2]
輸出: [2]
示例 2:

輸入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
輸出: [9,4]
說明:

輸出結(jié)果中的每個(gè)元素一定是唯一的膛檀。
我們可以不考慮輸出結(jié)果的順序。

解題思路
按照一般思路娘侍,我們可以構(gòu)造一個(gè)新的列表咖刃,遍歷和對(duì)比輸入的兩個(gè)列表,將輸入列表中相同的元素加入新的列表憾筏,注意新的列表中不要加入重復(fù)元素即可嚎杨。這咱思路,需要遍歷輸入的兩個(gè)列表氧腰,還要查詢要加入的元素是否已經(jīng)存在于目標(biāo)列表参萄,對(duì)目標(biāo)列表也要不斷查詢,性能并不理想孽文,也不會(huì)是面試官能接受的答案钱骂。更進(jìn)一步的思路,我們可以利用集合或字典中鍵的不重復(fù)性來構(gòu)造目標(biāo)元素的容器黄痪。具體解題方法可以參加Leetcode上本題題解紧帕。
而在Python中,提供了集合這一數(shù)據(jù)類型桅打,其支持集合的交并補(bǔ)等操作是嗜,所以我們可以直接利用這一特性。

class Solution:
    def intersection(self, nums1: List[int], nums2: List[int]) -> List[int]:
        return list(set(nums1) & set(nums2))

可以看到挺尾,我們先將列表轉(zhuǎn)成集合鹅搪,再對(duì)兩個(gè)集合取交,最后又轉(zhuǎn)成列表返回遭铺。

557. 反轉(zhuǎn)字符串中的單詞 III

給定一個(gè)字符串丽柿,你需要反轉(zhuǎn)字符串中每個(gè)單詞的字符順序,同時(shí)仍保留空格和單詞的初始順序魂挂。

示例 1:

輸入: "Let's take LeetCode contest"
輸出: "s'teL ekat edoCteeL tsetnoc" 
注意:在字符串中航厚,每個(gè)單詞由單個(gè)空格分隔,并且字符串中不會(huì)有任何額外的空格锰蓬。

解題思路

在Python中幔睬,許多可迭代對(duì)象都支持[::-1]反轉(zhuǎn)操作,字符串也支持這樣的操作芹扭。于是我們只要利用string.split()方法將句子切割開麻顶,再對(duì)每一個(gè)單詞反轉(zhuǎn)即可赦抖。

class Solution:
    def reverseWords(self, s: str) -> str:
        return ' '.join([e[::-1] for e in s.split(' ')])

注意:此處用到的列表推導(dǎo),Python中的大部分可迭代對(duì)象都支持就地推導(dǎo)辅肾。這也是“一行Python”中的常用操作队萤。

561. 數(shù)組拆分 I

給定長(zhǎng)度為 2n 的數(shù)組, 你的任務(wù)是將這些數(shù)分成 n 對(duì), 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得從1 到 n 的 min(ai, bi) 總和最大矫钓。

示例 1:

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

輸出: 4
解釋: n 等于 2, 最大總和為 4 = min(1, 2) + min(3, 4).
提示:

n 是正整數(shù),范圍在 [1, 10000].
數(shù)組中的元素范圍在 [-10000, 10000].

解題思路

憑直覺要尔,我們認(rèn)為只要使得“損失”掉的量最小即可,可須對(duì)原數(shù)組排序新娜,再再兩兩組合赵辕,求其中較小數(shù)的和即可。這么做可行的數(shù)學(xué)證明可見:https://leetcode-cn.com/problems/array-partition-i/solution/minshu-dui-bi-shi-you-xu-shu-lie-shang-xiang-lin-y/

class Solution:
    def arrayPairSum(self, nums: List[int]) -> int:
        return sum(sorted(nums)[::2])

這里用到了[::2]利用步長(zhǎng)迭代操作概龄。

509. 斐波那契數(shù)

斐波那契數(shù)还惠,通常用 F(n) 表示,形成的序列稱為斐波那契數(shù)列私杜。該數(shù)列由 0 和 1 開始蚕键,后面的每一項(xiàng)數(shù)字都是前面兩項(xiàng)數(shù)字的和。也就是:

F(0) = 0,   F(1) = 1
F(N) = F(N - 1) + F(N - 2), 其中 N > 1.
給定 N衰粹,計(jì)算 F(N)锣光。

示例 1:

輸入:2
輸出:1
解釋:F(2) = F(1) + F(0) = 1 + 0 = 1.

示例 2:

輸入:3
輸出:2
解釋:F(3) = F(2) + F(1) = 1 + 1 = 2.

示例 3:

輸入:4
輸出:3
解釋:F(4) = F(3) + F(2) = 2 + 1 = 3.

提示:

0 ≤ N ≤ 30

解題思路

斐波那契數(shù)是常見題,是屬于必須掌握的題铝耻。最常見的思路嫉晶,遞歸就完事了。但是要謹(jǐn)防遞歸中出現(xiàn)的“遞歸災(zāi)難”田篇,也就是對(duì)同樣的輸入進(jìn)行重復(fù)求值。這里給出一種使用遞歸一行解題的實(shí)現(xiàn)方式箍铭。

class Solution:
    def fib(self, N: int) -> int:
        return N if N = 0 or N = 1 else self.fib(N - 1) + self.fib(N - 2)

注意泊柬,上面的代碼中,就會(huì)出現(xiàn)“遞歸災(zāi)難”诈火,性能較差兽赁,也是屬于面試官不可接受的一種實(shí)現(xiàn)方式。更多常見的實(shí)現(xiàn)方式可自行查閱冷守。以下給出網(wǎng)友提供的通項(xiàng)公式法(本人并沒有驗(yàn)證過此通項(xiàng)公式):

# 通項(xiàng)公式
class Solution:
    def fib(self, N):
        """
        :type N: int
        :rtype: int
        """
        return int((5**0.5)*0.2*( ((1+5**0.5)/2)**N-((1-5**0.5)/2)**N))

476. 數(shù)字的補(bǔ)數(shù)

給定一個(gè)正整數(shù)刀崖,輸出它的補(bǔ)數(shù)。補(bǔ)數(shù)是對(duì)該數(shù)的二進(jìn)制表示取反拍摇。

注意:

給定的整數(shù)保證在32位帶符號(hào)整數(shù)的范圍內(nèi)亮钦。 你可以假定二進(jìn)制數(shù)不包含前導(dǎo)零位。 示例 1:

輸入: 5
輸出: 2
解釋: 5的二進(jìn)制表示為101(沒有前導(dǎo)零位)充活,其補(bǔ)數(shù)為010蜂莉。所以你需要輸出2蜡娶。

示例 2:

輸入: 1
輸出: 0
解釋: 1的二進(jìn)制表示為1(沒有前導(dǎo)零位),其補(bǔ)數(shù)為0映穗。所以你需要輸出0窖张。

解題思路

本題涉及到二進(jìn)制操作,對(duì)于一個(gè)整數(shù)i, i >> 1 表示其二進(jìn)制開式向右移一位蚁滋,等同于其十進(jìn)制形式除以2. 以下是一種常見思路(Go語言):

func findComplement(num int) int {
    tem := num
    c := 0
    for tem  >0 {
        tem >>= 1
        c = (c << 1) + 1
    }
    return num ^ c
}

以下是網(wǎng)友提供的一行解題方法:

return int(bin(num)[2:].replace('0', '2').replace('1', '0').replace('2', '1'), 2)

以上代碼用到了bin()函數(shù)宿接,它將十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)的字符串形式。再連續(xù)使用string.replace()方法辕录,最后轉(zhuǎn)成int類型睦霎。

852. 山脈數(shù)組的峰頂索引

我們把符合下列屬性的數(shù)組 A 稱作山脈:

A.length >= 3
存在 0 < i < A.length - 1 使得A[0] < A[1] < ... A[i-1] < A[i] > A[i+1] > ... > A[A.length - 1]
給定一個(gè)確定為山脈的數(shù)組,返回任何滿足 A[0] < A[1] < ... A[i-1] < A[i] > A[i+1] > ... > A[A.length - 1] 的 i 的值踏拜。

示例 1:

輸入:[0,1,0]
輸出:1

示例 2:

輸入:[0,2,1,0]
輸出:1

提示:


3 <= A.length <= 10000 0 <= A[i] <= 10^6 A 是如上定義的山脈

**解題思路**:

腦子轉(zhuǎn)得快的同學(xué)碎赢,一眼就知道本題求出數(shù)組的最大值的索引即可。

return A.index(max(A))


另一種符合直覺的想法是速梗,從第一位開始往后數(shù)肮塞,當(dāng)數(shù)字下一位開始變小時(shí),就把當(dāng)前數(shù)字的索引返回姻锁,用Go解釋如下:

func peakIndexInMountainArray(A []int) int {
for i := 1; i < len(A); i++ {
if A[i] < A[i - 1] {
return i - 1
}
}
return len(A) - 1
}


## 292\. Nim 游戲

你和你的朋友枕赵,兩個(gè)人一起玩 Nim 游戲:桌子上有一堆石頭,每次你們輪流拿掉 1 - 3 塊石頭位隶。 拿掉最后一塊石頭的人就是獲勝者拷窜。你作為先手。

你們是聰明人涧黄,每一步都是最優(yōu)解篮昧。 編寫一個(gè)函數(shù),來判斷你是否可以在給定石頭數(shù)量的情況下贏得游戲笋妥。

示例:

輸入: 4
輸出: false
解釋: 如果堆中有 4 塊石頭懊昨,那么你永遠(yuǎn)不會(huì)贏得比賽;
因?yàn)闊o論你拿走 1 塊春宣、2 塊 還是 3 塊石頭酵颁,最后一塊石頭總是會(huì)被你的朋友拿走。


**解題思路**:

可以用歸納法證明(可自行證明)月帝,只要給定石頭數(shù)量不是4的倍數(shù)躏惋,先手穩(wěn)贏。Python:

class Solution:
def canWinNim(self, n: int) -> bool:
return n % 4 != 0


## 461\. 漢明距離

兩個(gè)整數(shù)之間的漢明距離指的是這兩個(gè)數(shù)字對(duì)應(yīng)二進(jìn)制位不同的位置的數(shù)目嚷辅。

給出兩個(gè)整數(shù) x 和 y簿姨,計(jì)算它們之間的漢明距離。

注意: 0 ≤ x, y < 231.

示例:

輸入: x = 1, y = 4

輸出: 2

解釋:
1 (0 0 0 1)
4 (0 1 0 0)
↑ ↑


上面的箭頭指出了對(duì)應(yīng)二進(jìn)制位不同的位置簸搞。

**解題思路**:

一個(gè)符合直覺的思路是款熬,先把兩個(gè)數(shù)都轉(zhuǎn)成二進(jìn)制形式深寥,將長(zhǎng)度較短的數(shù)的開頭補(bǔ)成0,再依次比較每一位是否相同贤牛。以下是這種思路的一種實(shí)現(xiàn):

class Solution:
def hammingDistance(self, x: int, y: int) -> int:
binx, biny = bin(x)[2:], bin(y)[2:]
length = max(len(binx), len(biny))
binx, biny = binx.zfill(length), biny.zfill(length)
distance = 0
for ex, ey in zip(binx, biny):
distance += ex != ey
return distance


更高級(jí)一點(diǎn)的方法惋鹅,是使用位或操作,再統(tǒng)計(jì)位或計(jì)算后的數(shù)的二進(jìn)制形式中的1的數(shù)量殉簸。

class Solution:
def hammingDistance(self, x: int, y: int) -> int:
return bin(x^y).count('1')


## 657\. 機(jī)器人能否返回原點(diǎn)

在二維平面上闰集,有一個(gè)機(jī)器人從原點(diǎn) (0, 0) 開始。給出它的移動(dòng)順序般卑,判斷這個(gè)機(jī)器人在完成移動(dòng)后是否在 (0, 0) 處結(jié)束武鲁。

移動(dòng)順序由字符串表示。字符 move[i] 表示其第 i 次移動(dòng)蝠检。機(jī)器人的有效動(dòng)作有 R(右)沐鼠,L(左),U(上)和 D(下)叹谁。如果機(jī)器人在完成所有動(dòng)作后返回原點(diǎn)饲梭,則返回 true。否則焰檩,返回 false憔涉。

注意:機(jī)器人“面朝”的方向無關(guān)緊要。 “R” 將始終使機(jī)器人向右移動(dòng)一次析苫,“L” 將始終向左移動(dòng)等兜叨。此外,假設(shè)每次移動(dòng)機(jī)器人的移動(dòng)幅度相同衩侥。

示例 1:

輸入: "UD"
輸出: true
解釋:機(jī)器人向上移動(dòng)一次国旷,然后向下移動(dòng)一次。所有動(dòng)作都具有相同的幅度茫死,因此它最終回到它開始的原點(diǎn)跪但。因此,我們返回 true璧榄。


示例 2:

輸入: "LL"
輸出: false
解釋:機(jī)器人向左移動(dòng)兩次。它最終位于原點(diǎn)的左側(cè)吧雹,距原點(diǎn)有兩次 “移動(dòng)” 的距離骨杂。我們返回 false,因?yàn)樗谝苿?dòng)結(jié)束時(shí)沒有返回原點(diǎn)雄卷。


**解題思路**:

腦子轉(zhuǎn)得快的同學(xué)已經(jīng)知道搓蚪,只要機(jī)器人向左右走的步數(shù)相同且向上下走的步數(shù)相同,就肯定會(huì)回到原點(diǎn)丁鹉。我們可以利用string.count()方法妒潭。

100%

class Solution:
def judgeCircle(self, moves: str) -> bool:
return moves.count('U') == moves.count('D') and moves.count('L') == moves.count('R')


## 832\. 翻轉(zhuǎn)圖像

給定一個(gè)二進(jìn)制矩陣 A悴能,我們想先水平翻轉(zhuǎn)圖像,然后反轉(zhuǎn)圖像并返回結(jié)果雳灾。

水平翻轉(zhuǎn)圖片就是將圖片的每一行都進(jìn)行翻轉(zhuǎn)漠酿,即逆序。例如谎亩,水平翻轉(zhuǎn) [1, 1, 0] 的結(jié)果是 [0, 1, 1]炒嘲。

反轉(zhuǎn)圖片的意思是圖片中的 0 全部被 1 替換, 1 全部被 0 替換匈庭。例如夫凸,反轉(zhuǎn) [0, 1, 1] 的結(jié)果是 [1, 0, 0]。

示例 1:

輸入: [[1,1,0],[1,0,1],[0,0,0]]
輸出: [[1,0,0],[0,1,0],[1,1,1]]
解釋: 首先翻轉(zhuǎn)每一行: [[0,1,1],[1,0,1],[0,0,0]]阱持;
然后反轉(zhuǎn)圖片: [[1,0,0],[0,1,0],[1,1,1]]


示例 2:

輸入: [[1,1,0,0],[1,0,0,1],[0,1,1,1],[1,0,1,0]]
輸出: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]
解釋: 首先翻轉(zhuǎn)每一行: [[0,0,1,1],[1,0,0,1],[1,1,1,0],[0,1,0,1]]夭拌;
然后反轉(zhuǎn)圖片: [[1,1,0,0],[0,1,1,0],[0,0,0,1],[1,0,1,0]]


說明:

1 <= A.length = A[0].length <= 20
0 <= A[i][j] <= 1


**解題思路**:

同學(xué)們可以自行實(shí)現(xiàn)一下本題,再來看一行題解衷咽。

class Solution:
def flipAndInvertImage(self, A: List[List[int]]) -> List[List[int]]:
return [[{0: 1}.get(e, 0) for e in line[::-1]] for line in A]
# return [[j ^ 1 for j in i[::-1]] for i in A]


本題使用了列表推導(dǎo)的嵌套鸽扁,使用了位或操作,使用了[::-1]負(fù)步長(zhǎng)反轉(zhuǎn)列表兵罢,對(duì)解題人的Python特性了解程度有一定的要求献烦。

## 237\. 刪除鏈表中的節(jié)點(diǎn)

請(qǐng)編寫一個(gè)函數(shù),使其可以刪除某個(gè)鏈表中給定的(非末尾)節(jié)點(diǎn)卖词,你將只被給定要求被刪除的節(jié)點(diǎn)巩那。

現(xiàn)有一個(gè)鏈表 -- head = [4,5,1,9],它可以表示為:

![image](http://upload-images.jianshu.io/upload_images/16886563-17d3df0b9c9af02d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

示例 1:

輸入: head = [4,5,1,9], node = 5
輸出: [4,1,9]
解釋: 給定你鏈表中值為 5 的第二個(gè)節(jié)點(diǎn)此蜈,那么在調(diào)用了你的函數(shù)之后即横,該鏈表應(yīng)變?yōu)?4 -> 1 -> 9.


示例 2:

輸入: head = [4,5,1,9], node = 1
輸出: [4,5,9]
解釋: 給定你鏈表中值為 1 的第三個(gè)節(jié)點(diǎn),那么在調(diào)用了你的函數(shù)之后裆赵,該鏈表應(yīng)變?yōu)?4 -> 5 -> 9.


說明:

鏈表至少包含兩個(gè)節(jié)點(diǎn)东囚。
鏈表中所有節(jié)點(diǎn)的值都是唯一的。
給定的節(jié)點(diǎn)為非末尾節(jié)點(diǎn)并且一定是鏈表中的一個(gè)有效節(jié)點(diǎn)战授。
不要從你的函數(shù)中返回任何結(jié)果页藻。


**解題思路**:

有人說本題出的巧妙,本人卻并不這么認(rèn)為植兰,甚至認(rèn)為本題出得相當(dāng)自認(rèn)聰明份帐。核心思路是將本節(jié)點(diǎn)的上一節(jié)點(diǎn)的Next指向本節(jié)點(diǎn)的Next即可。

class Solution:
def deleteNode(self, node):
"""
:type node: ListNode
:rtype: void Do not return anything, modify node in-place instead.
"""
node.val, node.next = node.next.val, node.next.next


本題涉及到鏈表這種數(shù)據(jù)結(jié)構(gòu)楣导,如果有同學(xué)不了解這種數(shù)據(jù)結(jié)構(gòu)废境,可以先補(bǔ)一補(bǔ)數(shù)據(jù)結(jié)構(gòu)的知識(shí),畢竟鏈表題是面試題的最高頻的結(jié)構(gòu)題。

## 905\. 按奇偶排序數(shù)組

給定一個(gè)非負(fù)整數(shù)數(shù)組 A噩凹,返回一個(gè)數(shù)組巴元,在該數(shù)組中, A 的所有偶數(shù)元素之后跟著所有奇數(shù)元素驮宴。

你可以返回滿足此條件的任何數(shù)組作為答案逮刨。

示例:

輸入:[3,1,2,4]
輸出:[2,4,3,1]
輸出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也會(huì)被接受幻赚。


提示:

1 <= A.length <= 5000 0 <= A[i] <= 5000

解題思路

本題的實(shí)質(zhì)是一個(gè)排序題禀忆,同學(xué)們可以趁機(jī)自己實(shí)現(xiàn)一些排序算法,但是Python本身已經(jīng)提供了列表排序函數(shù)sorted()落恼。值得注意的是箩退,許多萌新同學(xué)并不了解這個(gè)函數(shù)可以傳入一個(gè)參數(shù)key來按key排序。key是 一個(gè)函數(shù)佳谦,這只使用lambda匿名函數(shù)來實(shí)現(xiàn)一行定義函數(shù)戴涝。

class Solution:
    def sortArrayByParity(self, A: List[int]) -> List[int]:
        # return [e for e in A if e % 2 == 0] + [e for e in A if e % 2 == 1]
        return sorted(A, key=lambda x: x % 2 == 1)
        # return sorted(A, key=lambda x: x & 1)

x & 1是什么操作?如果不了解钻蔑,可以補(bǔ)充一下Python位操作的知識(shí)啥刻,據(jù)我經(jīng)驗(yàn),判斷奇偶數(shù)時(shí)咪笑,x & 1比x % 2略好可帽。

709. 轉(zhuǎn)換成小寫字母

實(shí)現(xiàn)函數(shù) ToLowerCase(),該函數(shù)接收一個(gè)字符串參數(shù) str窗怒,并將該字符串中的大寫字母轉(zhuǎn)換成小寫字母映跟,之后返回新的字符串。

示例 1:

輸入: "Hello"
輸出: "hello"

示例 2:

輸入: "here"
輸出: "here"

示例 3:

輸入: "LOVELY"
輸出: "lovely"

解題思路

沒什么好說的扬虚,用Python中的string.lower()方法就好了努隙。代碼如下:
Go:

import "strings"

func toLowerCase(str string) string {
    return strings.ToLower(str)
}

Python:

class Solution:
    def toLowerCase(self, str: str) -> str:
        return str.lower()

771. 寶石與石頭

給定字符串J 代表石頭中寶石的類型,和字符串 S代表你擁有的石頭辜昵。 S 中每個(gè)字符代表了一種你擁有的石頭的類型荸镊,你想知道你擁有的石頭中有多少是寶石。

J 中的字母不重復(fù)堪置,J 和 S中的所有字符都是字母躬存。字母區(qū)分大小寫,因此"a"和"A"是不同類型的石頭舀锨。

示例 1:

輸入: J = "aA", S = "aAAbbbb"
輸出: 3

示例 2:

輸入: J = "z", S = "ZZ"
輸出: 0

注意:
S 和 J 最多含有50個(gè)字母岭洲。J 中的字符不重復(fù)。

本題可以利用Python中字符串的就地推導(dǎo)以及sum()函數(shù)對(duì)可迭代對(duì)象的求和雁竞。Python中真值屬于數(shù)字類型(許多語言中真值即布爾類型钦椭,布爾類型與數(shù)字類型是并列的兩大類型,但在Python中碑诉,布爾型是數(shù)字類型的一種彪腔,不信的話,可以試試isinstance(True, int)进栽,看看返回什么結(jié)果)德挣,可以參與數(shù)字運(yùn)算,所以以下代碼中快毛,sum(s in J for s in S)是可以求和的格嗅。

class Solution:
    def numJewelsInStones(self, J: str, S: str) -> int:
        return sum(s in J for s in S)
        # return sum(S.count(i) for i in J)

總結(jié)

從題目難度來說,大部分題目在Leetcode中都屬于“簡(jiǎn)單”唠帝,有的題目甚至讓你產(chǎn)生“這也算習(xí)題”的感覺屯掖。
從技巧上來說,一行Python主要利用了Python的可迭代對(duì)象的就地推導(dǎo)特征襟衰,豐富的字符串方法贴铜,豐富的容器操作(列表、集合瀑晒、字典等)绍坝,豐富的內(nèi)建函數(shù)(sum, bin等),以及方便的二進(jìn)制操作苔悦。
但要注意的是轩褐,一行Python解題,并不意味著Pythonic玖详,我也見過老長(zhǎng)老長(zhǎng)把介、強(qiáng)行一行的操作,而枉顧代碼的可讀性和性能竹宋。一行Python解題劳澄,也不意味著性能強(qiáng)悍,比如斐波那契數(shù)題中蜈七,如果使用暴力遞歸秒拔,會(huì)被面試官丟掉簡(jiǎn)歷的;按奇偶排序數(shù)組題中飒硅,使用兩次列表推導(dǎo)砂缩,分別求出奇數(shù)數(shù)組和偶數(shù)數(shù)組,可能還不如多寫幾行代碼對(duì)列表按奇偶排序三娩,以少迭代列表一次庵芭。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市雀监,隨后出現(xiàn)的幾起案子双吆,更是在濱河造成了極大的恐慌眨唬,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件好乐,死亡現(xiàn)場(chǎng)離奇詭異匾竿,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蔚万,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門岭妖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人反璃,你說我怎么就攤上這事昵慌。” “怎么了淮蜈?”我有些...
    開封第一講書人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵斋攀,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我梧田,道長(zhǎng)蜻韭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任柿扣,我火速辦了婚禮肖方,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘未状。我一直安慰自己俯画,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開白布司草。 她就那樣靜靜地躺著艰垂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪埋虹。 梳的紋絲不亂的頭發(fā)上猜憎,一...
    開封第一講書人閱讀 50,096評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音搔课,去河邊找鬼胰柑。 笑死,一個(gè)胖子當(dāng)著我的面吹牛爬泥,可吹牛的內(nèi)容都是我干的柬讨。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼袍啡,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼踩官!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起境输,我...
    開封第一講書人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤蔗牡,失蹤者是張志新(化名)和其女友劉穎颖系,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辩越,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡集晚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了区匣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蒋院,死狀恐怖亏钩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情欺旧,我是刑警寧澤姑丑,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布,位于F島的核電站辞友,受9級(jí)特大地震影響栅哀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜称龙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一留拾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鲫尊,春花似錦痴柔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至搔驼,卻和暖如春谈火,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背舌涨。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來泰國打工糯耍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人囊嘉。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓谍肤,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親哗伯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子荒揣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • 一、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 5,734評(píng)論 0 10
  • 一焊刹、基礎(chǔ)知識(shí):1系任、JVM恳蹲、JRE和JDK的區(qū)別:JVM(Java Virtual Machine):java虛擬機(jī)...
    殺小賊閱讀 2,371評(píng)論 0 4
  • 成年人的生活沒有容易二字。 就像我去考《經(jīng)濟(jì)法》的下午俩滥,炎炎烈日下嘉蕾,公寓門口,一個(gè)老爺爺蜷縮在狹小的空間里霜旧,借著僅...
    綠凌閱讀 206評(píng)論 0 0
  • 楊慧霞 洛陽 焦點(diǎn)講師班二期 堅(jiān)持分享第1104天 為了今天一早起來看升國旗错忱,昨晚不到十點(diǎn)鐘就睡了。一早...
    yhx慧心慧語閱讀 174評(píng)論 0 1
  • 寂寥冬日山中行挂据,凡塵俗事一拋輕以清。攀石援樹登峰頂,落照蒼煙白云生崎逃。 長(zhǎng)聲嘯掷倔,任逍遙,何妨縱懷飲情豪个绍。 欲學(xué)詩仙邀明月...
    馮展奎閱讀 1,296評(píng)論 3 23