2021.01.18
AC:
Easy 1,7,9,13,14
2021.01.20
AC:
Easy 20
2021.01.21
AC
Easy 21,26,27,28,29,38,53,58,66,67,69,70,83,88
2021.01.23
AC
Easy 100
2021.01.24
AC
Easy 101,104
2021.01.25
AC
Easy 107,108,110,111
2021.01.26
AC
Easy 112,118,119,121,122,125,136
2021.01.27
AC
Easy 141,155,160,167
2021.01.28
AC
Easy 168,169,171
2021.01.30
AC
Easy
172,278
2021.01.31
AC
Easy
283,290,303,326,342,344
題目分類
1 Two Sum 簡單數(shù)學題,二重循環(huán)看是否有兩個數(shù)之和等于要求的數(shù)
7 Reverse Integer 簡單字符串處理,不超過int上下限就翻轉(zhuǎn)字符串(加一些特判)
9 Palindrome Number 簡單字符串處理,判斷回文數(shù)(直接python字符串翻轉(zhuǎn)判斷)
13 Roman to Integer 簡單字符串處理,要特殊處理IV這種(如果后一個字母代表的數(shù)字比前一個大,加特判)
14 Longest Common Prefix 簡單字符串處理,一堆字符串的最長公共前綴(以第一個字符串為開始與之后的字符串匹配,匹配不到就不斷遞減長度)
20 Valid Parentheses 簡單模擬,棧操作
21 Merge Two Sorted Lists 簡單操作,合并有序鏈表
26 Remove Duplicates from Sorted Array 數(shù)組去重,python的list pop操作
27 Remove Element 數(shù)組去除指定值的元素,python的list pop操作
28 Implement strStr() 字符串查找
35 Search Insert Position 尋找有序數(shù)組的插入點
38 Count and Say 簡單模擬
53 Maximum Subarray 最大連續(xù)子序列
58 Length of Last Word 句子中最后一個單詞長度,注意特判(輸入只有一堆宮格,或者最后一個單詞后面還有空格,或者空串)
66 Plus One 大數(shù)加法模擬(+1)(顛倒字符串先)
67 Add Binary 二進制加法模擬(顛倒字符串先)
69 Sqrt(x) 求sqrt,精確到整數(shù)(二分0~x,注意特判x=1)
70 Climbing Stairs n級臺階,每次爬1 或2層,問一共幾種爬法,dp[n]=dp[n-1]+dp[n-2],因為只要記錄過去的兩個值,可以用兩個變量記錄,不用開dp[n]數(shù)組
83 Remove Duplicates from Sorted List 鏈表去重if p.next.val == p.val: p.next = p.next.next
88 Merge Sorted Array 合并有序數(shù)組,需要插入時把數(shù)組某個值之后的值后移
100 Same Tree 判斷兩棵二叉樹是否一樣,簡單遞歸,注意類中函數(shù)自我調(diào)用self.,注意空樹的特判
if p == None and q != None:
return False
if p != None and q == None:
return False
if p != None and q != None and p.val != q.val:
return False
if p != None and q != None:
return self.isSameTree(p.left, q.left) and self.isSameTree(p.right, q.right)
return True
101 Symmetric Tree 判斷二叉樹是否對稱,同時DFS,一個從左到右,一個從右到左,注意python類變量的使用self.xx
104 Maximum Depth of Binary Tree 計算二叉樹深度,簡單DFS
max_depth = 1
def DFS_Tree(self, root, depth):
self.max_depth = max(self.max_depth, depth)
if root.left != None:
self.DFS_Tree(root.left, depth + 1)
if root.right != None:
self.DFS_Tree(root.right, depth + 1)
return
def maxDepth(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if root == None:
return 0
self.DFS_Tree(root, 1)
return self.max_depth
107 Binary Tree Level Order Traversal II 按照深度輸出二叉樹每一層的所有值,BFS
108 Convert Sorted Array to Binary Search Tree DFS,每次從中間等分,創(chuàng)造兩棵子樹
110 Balanced Binary Tree 判斷是否是二叉平衡樹,DFS
111 Minimum Depth of Binary Tree 計算二叉樹最小葉子的深度(兩個兒子都沒有才是葉子),DFS or BFS
112 Path Sum 二叉樹是否有一條path只和等于給定值,DFS,注意一直要加到葉子結(jié)點,以及注意判斷空樹
118 Pascal's Triangle 上一行相鄰元素求和,一行行往下算,注意判0
119 Pascal's Triangle II 與118一樣,但只要輸出第k行的值,并且只能額外使用O(k)Memory,只要記住前一行的值就行
121 Best Time to Buy and Sell Stock 給定每天的股價,問何日買進何日賣出最劃算,每次記錄從1~i-1的股價最大值,嘗試第i日賣出是否更好
122 Best Time to Buy and Sell Stock II 給定每天的股價,可以多次買入/賣出,問一共最多賺多少,相鄰元素相減,大于零就加上(大于零相當于多在手上拿一天,否則就是中間賣掉再次買入,貪心)
125 Valid Palindrome 判斷字符串是否對稱(字母數(shù)字以外的字符不算)。去掉其他字符,大寫都變?yōu)樾懼箢嵉棺址词欠褚粯樱ㄓ懈媒夥ǎ?/p>
136 Single Number 一堆數(shù)里面只有一個出現(xiàn)一次,其他都出現(xiàn)兩次,找出出現(xiàn)一次的,所有數(shù)全部異或一遍,最后的值即為所求
141 Linked List Cycle 判斷單向鏈表中是否有環(huán),開兩個指針,一個一次跳一步,一個一次跳兩步,如果兩個指針相遇則有環(huán)
155 Min Stack 模擬棧,注意getMin()需要在O(1)返回結(jié)果,所以每次入棧的時候順便記錄當前棧中的最小值
160 Intersection of Two Linked Lists 判斷兩條單向鏈表是否從某一點開始合成同一個鏈表,兩個指針從兩個開頭開始找,如果一個找完了就從另一條開始(相當于兩個指針交換位置重新找),如果在某個點兩個指針重合了,那就是兩個鏈表有合并
theadA = headA
theadB = headB
while theadA != theadB:
#print(theadA.val)
#print(theadB.val)
if theadA != None:
theadA = theadA.next
else:
theadA = headB
if theadB != None:
theadB = theadB.next
else:
theadB = headA
return theadA
167 Two Sum II - Input array is sorted 在給定的遞增數(shù)列中找兩個數(shù),之和等于給定值(保證有解)
解法一:兩個游標,分別從頭和尾向中間游動,和比給定值小左側(cè)加一,否則右側(cè)加一
解法二,左側(cè)游標從1-n遍歷,右側(cè)用二分,時間和解法一差不太多,注意二分寫法
l = i + 1
r = len(numbers)
while l < r:
mid = (l + r) // 2
if numbers[i] + numbers[mid] == target:
return [i + 1, mid + 1]
if numbers[i] + numbers[mid] < target:
l = mid + 1
else:
r = mid
168 Excel Sheet Column Title 將數(shù)字轉(zhuǎn)成excel的A-AA-。。。ZZZ這個的格式,不斷取模再轉(zhuǎn)換
169 Majority Element 求數(shù)組中出現(xiàn)次數(shù)超過半數(shù)的數(shù)字
解法一:直接sort,返回中間的數(shù)字
解法二:哈希表,python的dict
解法三:bit voting
解法四:分治
解法五:C++ nth_element()
171 Excel Sheet Column Number 將excel的A-AA-。。。ZZZ這個的格式轉(zhuǎn)為數(shù)字,建個dict存字母到數(shù)字的映射,從第一個字符開始不斷*26+值
PS:python的ord()函數(shù)可以 直接返回ascii碼值
172. Factorial Trailing Zeroes,算n的階乘末尾0的數(shù)量,即計算1-n中5的數(shù)量
t = 0
while n >= 5:
n = n // 5
t = t + n
return t
278. First Bad Version,1-n個版本,從第m個開始后面都是bad,每次可以調(diào)用isBadVersion(i)判斷I是不是好的,問從第幾個開始是bad,簡單二分
l = 1
r = n
if n == 1:
return 1
while l <= r:
mid = (l + r) // 2
#print mid
if isBadVersion(mid):
if mid == 1 or isBadVersion(mid - 1) == False:
return mid
r = mid
else:
l = mid + 1
283. Move Zeroes 把數(shù)字串中的0挪到末尾,利用python的list操作
l = len(nums)
nums[:]=[i for i in nums if i != 0]
nums += [0]*(l - len(nums))
290. Word Pattern 判斷字符串是否符合某種pattern,python的dict操作,注意如下兩種的區(qū)別
Input: pattern = "abba", s = "dog cat cat dog"
Output: true
Input: pattern = "abba", s = "dog dog dog dog"
Output: false
292. Nim Game n個石子,輪流取,每次1-3顆,問給定n是否能贏,n若是4(3+1)的倍數(shù)必輸,其他都贏
303. Range Sum Query - Immutable 區(qū)間求和,多次query,預處理0-i的和,return self.sums[j + 1] - self.sums[i]
326. Power of Three 判斷一個數(shù)是否是3的某次方
解法一,不斷除3
解法二,n > 0 and math.ceil(log10(n) / log10(3)) == int(log10(n) / log10(3))
342. Power of Four 判斷一個數(shù)是否是4的某次方,同326
344. Reverse String 字符串翻轉(zhuǎn)
解法一,str.reverse()
解法二,左右兩個游標