Description
On a broken calculator that has a number showing on its display, we can perform two operations:
- Double: Multiply the number on the display by 2, or;
- Decrement: Subtract 1 from the number on the display.
Initially, the calculator is displaying the number X.
Return the minimum number of operations needed to display the number Y.
Example 1:
Input: X = 2, Y = 3
Output: 2
Explanation: Use double operation and then decrement operation {2 -> 4 -> 3}.
Example 2:
Input: X = 5, Y = 8
Output: 2
Explanation: Use decrement and then double {5 -> 4 -> 8}.
Example 3:
Input: X = 3, Y = 10
Output: 3
Explanation: Use double, decrement and double {3 -> 6 -> 5 -> 10}.
Example 4:
Input: X = 1024, Y = 1
Output: 1023
Explanation: Use decrement operations 1023 times.
Note:
- 1 <= X <= 10^9
- 1 <= Y <= 10^9
分析
题目的意思是:给定X和Y两个数,求X可以乘2或者减1,求最少操作步骤使X变成Y。这道题我参考了一下答案,可以反向通过Y变成X,如果Y是偶数,则除以2,如果是奇数则加上1,直到Y小于等于X为止。最后的结果就是res+X-Y,我验证了一下,确实是这样的,可能是用到了贪心的算法:通过除 2,使 Y 不断的逼近 X。对于偶数,除 2 操作,不管怎么样,肯定比递增 Y 好
代码
class Solution:
def brokenCalc(self, X: int, Y: int) -> int:
res=0
while(Y>X):
res+=1
if(Y%2==1):
Y+=1
else:
Y=Y//2
return res+X-Y