题目
思路
这道题当X>=Y时只能进行递减操作,所以结果为X-Y。X<Y的情况,如果正向思考,即思考如何从X到Y的话思路比较复杂,因为很难描述从X开始每次应该选择哪一种操作。理想状态应该是在接近Y的1/8,1/4,1/2的情况下进行加倍操作,但是从程序角度不好描述。这道题比较好的思路是逆向思考,即思考如何从Y到X,此时对应的Y的操作为加1和除以2。从Y的角度需要尽量除以2,该操作需要在Y为偶数时进行,否则要先加1再进行操作,知道Y<=X,之后只调用+1操作即可。这样对于Y 来说每一步选哪个操作显而易见,便于写出程序.
代码
class Solution:
def brokenCalc(self, X: int, Y: int) -> int:
if X>=Y:
return X-Y
else:
ans=0
while X<Y:
if Y&1:
Y+=1
ans+=1
else:
Y//=2
ans+=1
ans+=X-Y
return ans