假设我们有一个数字开头和另一个数字结尾(开始<结束),我们必须找到使用这些操作将开始转换为结束所需的最小操作数-
递增1
乘以2
因此,如果输入就像开始= 5,结束= 11,那么输出将是2,因为我们可以将2乘以得到10,然后再加1以得到11。
为了解决这个问题,我们将遵循以下步骤-
ct:= 0
当end / 2> =开始时,执行
结束:=结束/ 2
ct:= ct + 1
结束:=结束-1
结束:=结束/ 2
ct:= ct + 2
如果end mod 2与1相同,则
除此以外,
ct:= ct +(结束开始)
返回ct
让我们看下面的实现以更好地理解-
class Solution: def solve(self, start, end): ct=0 while(end/2>=start): if end%2==1: end-=1 end=end/2 ct+=2 else: end=end/2 ct+=1 ct+=(end-start) return ct ob = Solution()print(ob.solve(5,11))
5,11
输出结果
2