📅  最后修改于: 2023-12-03 14:58:03.062000             🧑  作者: Mango
给定两个正整数 A 和 B,你需要最少地执行以下两种操作之一,来将 A 转换为 B:
问最少需要多少次操作才能将 A 转换为 B。
对于这个问题,我们可以使用贪心的思想。考虑从 B 逆推回 A,显然我们每次都是除以 2 或减去 1。对于最后一个数字,我们无法判断当前数字应该是除以 2 还是减去 1,因此,我们需要分类讨论:
def transform(A: int, B: int) -> int:
cnt = 0
while A < B:
cnt += 1
if B % 2:
B += 1
else:
B //= 2
return cnt + A - B
本算法的时间复杂度为O(logB),空间复杂度为O(1)。