题:https://leetcode.com/problems/broken-calculator/
题目大意
只能对 x 进行 两种操作:
1.乘2;
2.减1;
求 最小 操作 数 使 x 变为 y。
思路
x —> y 比较难
尝试 y ->x 。
存在 两种 操作
1.除以2.
2.加1.
对于 y <= x ,那么 操作数 定为 x - y
若 y > x,
那么
有两种方案
一是 (y + o)/ 2
二是 (y/2) + o/2
明显 y 变为 一个比他小的数时,使用 方法二 步骤更少。
当然 这里 需要保证 y 是 偶数
class Solution {
public int brokenCalc(int X, int Y) {
int res = 0;
while(Y>X){
res ++;
if((Y&1) == 1)
Y++;
else
Y/=2;
}
return res + X - Y;
}
}