def hanota(A: List[int], B: List[int], C: List[int]) -> None:
"""
Do not return anything, modify C in-place instead.
"""
length = len(A)
# 思路:通过中间的跳转,每次实现
def traceback(n, src, tmp, target):
if n == 1:
target.append(src.pop())
return
traceback(n - 1, src, target, tmp) # 1、以target为中间过度,把 src 的n-1放到 tmp
target.append(src.pop()) # 2、把src 的最大元素放到 target
traceback(n - 1, tmp, src, target) # 3、以src为中间过度,把 tmp 的所有元素放到 target
traceback(length, A, B, C)
A = [4, 3, 2, 1, 0]
C = []
hanota(A, [], C)
print(A, C)
核心思想:
def traceback(n, src, tmp, target):
if n == 1:
print(f"{src} -({n}> {target}")
return
# 1、以C为中间过度,把A的n-1放到B
# 2、把A的最大元素放到C
# 3、以A为中间过度,把B的所有元素放到C
traceback(n - 1, src, target, tmp)
print(f"\t{src} -({n})> {target}")
traceback(n - 1, tmp, src, target)
traceback(4, "A", "B", "C")
374

被折叠的 条评论
为什么被折叠?



