[路飞] 5194. 得到目标值的最少行动次数

142 阅读1分钟

题目描述

你正在玩一个整数游戏。从整数 1 开始,期望得到整数 target 。

在一次行动中,你可以做下述两种操作之一:

递增,将当前整数的值加 1(即, x = x + 1)。 加倍,使当前整数的值翻倍(即,x = 2 * x)。 在整个游戏过程中,你可以使用 递增 操作 任意 次数。但是只能使用 加倍 操作 至多 maxDoubles 次。

给你两个整数 target 和 maxDoubles ,返回从 1 开始得到 target 需要的最少行动次数。

这是一道周赛题: leetcode-cn.com/problems/mi…

解题思路

算法

贪心,能除 2 就开整,不能先减 1,最后剩下的值 - 1 时需要"递增"的 steps

代码

/**
 * @param {string} s
 * @param {number} k
 * @param {character} fill
 * @return {string[]}
 */
var divideString = function(s, k, fill) {
    const arr = []
    let index = 0
    
    while (index < s.length) {        
        let cur = new Array(k).fill(fill)
        let count = 0
        while (count < k && index < s.length) {
            cur[count] = s[index++]
            count++
        }
        
        arr.push(cur.join(''))
    }
    
    return arr
};