题目
在显示着数字的坏计算器上,我们可以执行以下两种操作:
双倍(Double):将显示屏上的数字乘 2;
递减(Decrement):将显示屏上的数字减 1 。
最初,计算器显示数字 X。返回显示数字 Y 所需的最小操作数。
示例
输入:X = 2, Y = 3
输出:2
解释:先进行双倍运算,然后再进行递减运算 {2 -> 4 -> 3}.
解题思路
我们采有逆向思维,让y
除2
(当y
为奇数数,y
执行+1
操作),让它尽快的小于x
。这样我们就可以是贪心的使用除2操作。当y
小于x
时,就需要x
做x-y
步减1操作。
实现代码
public static int brokenCalc(int X, int Y) {
int ans = 0;
while (Y > X) {
ans++;
if (Y % 2 == 1)
Y++;
else
Y /= 2;
}
return ans + X - Y;
}
扫码关注公众号(搜索公众号:平头哥的技术博文)一起交流学习呗