0
点赞
收藏
分享

微信扫一扫

Leetcode第 276 场周赛-第二题2139. 得到目标值的最少行动次数

前端王祖蓝 2022-01-17 阅读 28

题目

2139. 得到目标值的最少行动次数 - 力扣(LeetCode) (leetcode-cn.com)

 

 解题思路

拿到题目冷静分析,加倍一定是使1最快到达target,但是加倍次数有限。

再次冷静分析,1加倍到25加倍到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;
    }

}

解题结果

举报

相关推荐

0 条评论