24、贪心算法
只适用于是倍数的情况,当面值是10,9,1的时候,组成18,贪心就不试用(10+8*1与9*2)
25、买卖股票的最佳时机
搜索+贪心+动态规划
下面这个是贪心算法的代码。其他两种还在学
class Solution:
def maxProfit(self, prices: List[int]) -> int:
profit=0
for i in range(len(prices)-1):
if prices[i+1]>prices[i]:
profit +=prices[i+1]-prices[i]
return profit
26、广度优先搜索(BFS-Breadth-First-Search)
27、深度优先搜索
28、二叉树层次遍历
一定要记住:visited不能忘记了,在图里面这个很关键
DFS的解法:
29、二叉树的最大和最小深度
DFS:代码
class Solution:
def maxDepth(self, root: TreeNode) -> int:
if not root: return 0
queue=[]
visited=[]
queue.append(root)
length=0
while queue:
len1=len(queue)
length+=1
for i in range(len1):
node=queue.pop(0)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
return length
#广度优先的代码
30、生成有效括号组合
1、数学归纳法
2、递归搜索
3、剪枝
代码:两个差不多。都是递归+剪枝的思想:
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
self.list=[]
self._gen(0,0,n,"")
return self.list
def _gen(self,left,right,n,result):
#递归终止条件
if left==n and right==n:
self.list.append(result)
return
if left<n:
self._gen(left+1,right,n,result+"(")
if left>right and right<n:
self._gen(left,right+1,n,result+")")
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
self.list=[]
self._gen(n,n,n,"")
return self.list
def _gen(self,left,right,n,result):
if left==0 and right==0:
self.list.append(result)
return
if left>0:
self._gen(left-1,right,n,result+"(")
if right>left and right>0:
self._gen(left,right-1,n,result+")")
参考:https://mp.csdn.net/postedit/90546725