Leetcode 991.壞了的計算器
1 題目描述(Leetcode題目鏈接)
在顯示着數字的壞計算器上,我們可以執行以下兩種操作:
- 雙倍(Double):將顯示屏上的數字乘 2;
- 遞減(Decrement):將顯示屏上的數字減 1 。
最初,計算器顯示數字 X。
返回顯示數字 Y 所需的最小操作數。
輸入:X = 2, Y = 3
輸出:2
解釋:先進行雙倍運算,然後再進行遞減運算 {2 -> 4 -> 3}.
輸入:X = 3, Y = 10
輸出:3
解釋:先雙倍,然後遞減,再雙倍 {3 -> 6 -> 5 -> 10}.
提示:
- 1 <= X <= 10^9
- 1 <= Y <= 10^9
2 題解
轉化爲將Y變成X需要的步數,這樣操作就變成了除以2和加1。貪心策略爲:Y是偶數就除以2,Y是奇數則加1。
class Solution:
def brokenCalc(self, X: int, Y: int) -> int:
res = 0
while X < Y:
if Y % 2 == 0:
Y //= 2
else:
Y += 1
res += 1
return res + X - Y