leetcode中有很多python one-liners,大致可分为如下几种。
1,简单明了型
这种类型的基本写过一定时间python的人都能想得出来,因为会用到一些python特有的性质,主要也是针对相对简单的问题,写出来不会给人一种装逼的感觉,比如下面几种。contains duplicate
def containsDuplicate(nums):
return len(nums) != len(set(nums))palindrome of a string
def findPalindrome(string):
return string[::-1]
2,简单装逼型
此类型需要熟练使用python一些库,写出来后有一定的pythonic逼格,但是解答的问题也通常较简单。single number
def singleNumber(nums):
return reduce(lambda x, y: x ^ y, nums)length of last word
def lengthOfLastWord(s):
return len(s.strip().split(" ")[-1])
3,粗暴装逼型
这种就像题注说的,牺牲了一定的时间空间复杂度,经常会把字符串cast成整数或者整数cast成字符串,但是硬是达到了pythonic的效果。plus one (input是一个数组,每个数表示一位数)
def plusOne(digits):
return [int(i) for i in str(int("".join(map(str, digits)))+1)]add binary
def addBinary(a, b):
bin(int(a, 2) + int(b, 2))[2:]
4,朴实炫技型
大家都看得懂,没有过多调用python的包包,逻辑也和在别的语言一样,但在python就是能一行完成。quicksort
def quicksort(nums):
return if len(nums) == 0 else quicksort([num for num in nums[1:] if num < nums[0]]) + [nums[0]] + quicksort([num for num in nums[1:] if num >= nums[0]])
5,大神炫技型
之前网上看到的,非leetcode,把python特性运用到了极致写出高校代码。getContourPoint, 比如[1,2,3,4,5,6] -> [(1,2,3),(4,5,6)]
def getContourPoint(nums):
return zip(*[iter(nums)]*3)
6,学神型
数据科学机器学习调包解体的,比如andrew ng解答cocktail party问题的python写法
W,s,v = np.linalg.svd(np.dot((np.tile(sum(x*x,0),(x.shape[0],1))*x),x.T))
面试中个人觉得2和4都是能接受的,如果面试官不了解python的话可以解释下syntax就好了。5和6就真的是大神了,复杂度神么的都是浮云。1和3这种捷径在面试中一般人不大能接受。