leetcode模板整理

1、DFS\BFS遍历树

def dfs(root):
    if (root is None):
        return
    dfs(root.left)
    dfs(root.right)

def bfs(root):#相当于层序遍历
    queue=[]
    queue.append(root);
    while (queue):
        node = queue.pop(0)#弹出一个节点,然后挨个添加它的左右子树
                          #pop()默认-1
        if (node.left is not None):
            queue.append(node.left)
        if (node.right is not None):
            queue.append(node.right)

	#总结
	while queue 不空:
	    cur = queue.pop()
	    if cur 有效且未被访问过:
	        进行处理
	    for 节点 in cur 的所有相邻节点:
	        if 该节点有效:
	            queue.push(该节点)

2、动态规划

#二维矩阵赋初始值
rows, columns = len(grid), len(grid[0])#行  列
dp = [[0 for _ in range(columns)] for _ in range(rows)]

3、回溯(DFS)

result = []
def backtrack(路径, 选择列表):
    if 满足结束条件:
        result.add(路径)
        return
    for 选择 in 选择列表:
        做选择
        backtrack(路径, 选择列表)
        撤销选择

4、二分查找

left=0
right=len(nums)-1
while left<right:
    mid = left + (right - left) // 2#用/2会出现小数
    if nums[mid]<target:
        操作1
    elif nums[mid]==target:#mid是一个目标,mid前可能还有
        操作2
    else:
        #nums[mid]>target
        操作3

关于二分查找边界问题上下取整

  • right = midleft = mid + 1mid = left + (right - left) / 2;一定是配对出现的;
  • right = mid - 1left = midmid = left + (right - left + 1) /2; 一定是配对出现的。

猜你喜欢

转载自blog.csdn.net/qq_40707462/article/details/113179037