LeetCode之Burst Balloons(Kotlin)

问题:


LeetCode之Burst Balloons(Kotlin)_第1张图片

方法:
首先把nums补全,即nums[-1] = nums[n] = 1。思路上来说首先想到DFS遍历所有可能的戳破的情况,但是重复计算过多,导致执行超时。然后想到DP动态规划思路,dp[i][j] 表示戳破 [i+1...j-1] 号气球的最大收益,假设 k 号气球(i+1 <= k <= j-1)是 [i+1...j-1] 中最后一个被戳破的,则dp[i][j] = max {for k = range(i+1, j -1) nums[i] * nums[k] * nums[j] + dp[i][k] + dp[k][j]}为动态规划的递推公式。

具体实现:

class BurstBalloons {
    fun maxCoins(nums: IntArray): Int {
        val fullNums = nums.toMutableList()
        fullNums.add(0, 1)
        fullNums.add(1)
        val dp = Array(fullNums.size) { Array(fullNums.size) { 0 } }
        for (len in 2..fullNums.lastIndex) {
            for (i in 0..fullNums.lastIndex - len) {
                val j = i + len
                for (k in i + 1..j - 1) {
                    dp[i][j] = maxOf(dp[i][j], fullNums[k] * fullNums[i] * fullNums[j] + dp[i][k] + dp[k][j])
                }
            }
        }
        return dp[0][dp.lastIndex]
    }
}

fun main(args: Array) {
    val input = intArrayOf(3, 1, 5, 8)
    val burstBalloons = BurstBalloons()
    println(burstBalloons.maxCoins(input))
}

有问题随时沟通

具体代码实现可以参考Github

你可能感兴趣的:(LeetCode之Burst Balloons(Kotlin))