有 n 個氣球,編號為0 到 n-1,每個氣球上都標有乙個數字,這些數字存在陣列nums
中。
現在要求你戳破所有的氣球。每當你戳破乙個氣球i
時,你可以獲得nums[left] * nums[i] * nums[right]
個硬幣。 這裡的left
和right
代表和i
相鄰的兩個氣球的序號。注意當你戳破了氣球 i 後,氣球left
和氣球right
就變成了相鄰的氣球。
求所能獲得硬幣的最大數量。
說明:
示例:
輸入: [3,1,5,8]
輸出: 167
解釋: nums = [3,1,5,8] --> [3,5,8] --> [3,8] --> [8] -->
coins = 3*1*5 + 3*5*8 + 1*3*8 + 1*8*1 = 167
1 暴力// 1 暴力法
// 超時
class
solution
private
:int
helper
(vector<
int>
& nums,
int l,
int r)
};
2 動態規劃
dp[i][j]
表示從l位置到r位置的最大分數
// 2 動態規劃
// 時間複雜度o(n^3) 空間複雜度o(n^2)
class
solution
// 從下往上 從左往後迭代計算
// dp[l][r]值值依賴同一行左邊dp[r-1]和同一列下邊dp[l+1]的有效位置
LeetCode312 戳氣球(難)
看了大概7 8分鐘,沒有思路。自己暴力的想法是n的階乘級別,也難寫。直接看題解,很巧妙,很驚嘆。參考講解 經典動態規劃 戳氣球 直接上 class solution dp i j 表示搓破 i,j 之間的氣球獲得的最大硬幣數量 邊界條件 dp i i 0,它們之間沒有氣球,dp i i 1 0 它們...
leetcode 312 戳氣球(區間dp)
312.戳氣球 難度困難297 有n個氣球,編號為0到n 1,每個氣球上都標有乙個數字,這些數字存在陣列nums中。現在要求你戳破所有的氣球。每當你戳破乙個氣球i時,你可以獲得nums left nums i nums right 個硬幣。這裡的left和right代表和i相鄰的兩個氣球的序號。注意...
leetcode 312 戳氣球(動態規劃)
題目描述 有 n 個氣球,編號為0 到 n 1,每個氣球上都標有乙個數字,這些數字存在陣列 nums 中。現在要求你戳破所有的氣球。戳破第 i 個氣球,你可以獲得 nums i 1 nums i nums i 1 枚硬幣。這裡的 i 1 和 i 1 代表和 i 相鄰的兩個氣球的序號。如果 i 1或 ...