题目
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;
    }
}
 
解题结果











