题目
2139. 得到目标值的最少行动次数 - 力扣(LeetCode) (leetcode-cn.com)
解题思路
拿到题目冷静分析,加倍一定是使1最快到达target,但是加倍次数有限。
再次冷静分析,1加倍到2 和 5加倍到10,一次加倍,肯定是数越大,收益越大。
因此,需要将加倍的机会给更大的数。当拿到19的时候,把加倍机会首先给到9
因此,要从target开始逆推到1更为合适。
如果是奇数,那么先做个减一操作,再折半
如果是偶数,直接折半
当加倍次数消耗光了,其余的就是增加了
解题代码
public class Solution2139 {
public static void main(String[] args) {
Solution2139 solution5194 = new Solution2139();
int a = solution5194.minMoves(10,4);
System.out.println(a);
}
public int minMoves(int target, int maxDoubles) {
if (target==1){
return 0;
}
//由target逆推
int doubleNum=0;
int res=0;
// 第一步,耗尽所有加倍
while (doubleNum<maxDoubles){
if (target%2==0){
target = target/2;
res++;
}
else {
target = target-1;
res++;
target = target/2;
res++;
}
doubleNum++;
if (target==1){
return res;
}
}
//第二步,加倍和耗尽,全用递增。
return res+target-1;
}
}