逆向思维:什么时候×2?尽量大的时候×2!!!
所以从tagert逆向思考:
如果二进制末尾是1,只能用-1.
否则如果maxDoubles大于0,使用/2,否则直接用-1。
class Solution {
public:
int minMoves(int target, int maxDoubles) {
int ans = 0;
while (target != 1) {
if (target & 1) {
ans++;
target -= 1;
}else if (maxDoubles > 0){
ans++;
target >>= 1;
maxDoubles--;
}else return ans + target - 1;
}
return ans;
}
};