1. 递归
- 递归函数必须要有终止条件,否则会出错;
- 递归函数先不断调用自身,直到遇到终止条件后进行回溯,最终返回答案。
2. 递归条件
- 一个大问题拆成两个子问题
- 子问题求解方式和大问题一样
- 存在最小子问题
3. 遍历链表,存入数组
- 链表的缺点:不能通过下标访问对应的元素。
- 可以考虑对链表进行遍历,同时将遍历到的元素[head][-1].next依次放入数组 A 中。
- 如果遍历到了 N 个元素,那么链表以及数组的长度也为 N,对应的中间节点即为 A[N//2]。
head = ListNode [1,2,3,4,5]
A = [head]
while A[-1].next:
A.append(A[-1].next)
print(A)
[ListNode{val: 1, next: ListNode{val: 2, next: ListNode{val: 3, next: ListNode{val: 4, next: ListNode{val: 5, next: None}}}}},
ListNode{val: 2, next: ListNode{val: 3, next: ListNode{val: 4, next: ListNode{val: 5, next: None}}}},
ListNode{val: 3, next: ListNode{val: 4, next: ListNode{val: 5, next: None}}},
ListNode{val: 4, next: ListNode{val: 5, next: None}},
ListNode{val: 5, next: None}]
A = {}
for i in range(len(head)):
A[i] = head
head = head.next
print(A)
4. 双指针(快慢指针)
链表指针的停止条件:
fast 快指针
while fast is not None :
while fast != None :
while fast:
# 三种均可
4. dict.get()
dict.get(a,b):a是键值key,如果dict存在键值a,则函数返回dict[a];
如果dict的key中不存在a,则返回b;
如果没有定义b参数,则返回None。