LeetCode312. 戳气球 (分治,记忆化搜索,动态规划)

博客详细介绍了如何使用分治法和记忆化搜索来解决LeetCode312题——戳气球问题。通过解题思路、记忆化搜索的递归实现以及动态规划的自底向上方法,阐述了解决这个问题的核心思想和步骤。
摘要由CSDN通过智能技术生成

LeetCode312. 戳气球

解题思路

官方题解
参考题解

核心思想:
由于戳气球的操作会导致两个气球从不相邻变成相邻,使得后续操作难以处理。于是我们倒过来看这些操作,将全过程看成每次添加一个气球。
solve(i, j)表示 开区间(i, j) 所能获得的最大硬币数。当开区间只包含一个气球mid时,solve(i, j) = val[i] * val[mid] * val[j]
在这里插入图片描述

记忆化搜索

自顶向下分治+递归+记忆

/*
解法一: 记忆化搜索
	由于戳气球的操作会导致两个气球从不相邻变成相邻,使得后续操作难以处理。
	于是我们倒过来看这些操作,将全过程看成每次添加一个气球。
*/
func maxCoins(nums []int) int {
   
	n := len(nums)

	/*
		初始化val切片,左右边界都视为值为1的气球
	*/
	val := make([]int, n+2)
	val[0], val[n+1] = 1, 1
	for i := 1; i < n+1; i++ {
   
		val[i] = nums[i-1]
	}

	/*
		初始化结果数组,res[i][j]表示开区间(i, j)
		所能获取的最大硬币数
	*/
	res := make([][]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值