Sponsored
Sponsored
This approach involves using a recursive function to try bursting each balloon and calculating the coins collected, while storing results of already computed subproblems to avoid redundant calculations. We pad the nums
array with 1 at both ends to handle boundary conditions easily. For each subproblem defined by indices left
and right
, we choose a balloon i
to burst last and calculate the coins.
Time Complexity: O(n^3), where n is the total number of balloons including the padding ones.
Space Complexity: O(n^2) due to memoization table.
1def maxCoins(nums):
2 nums = [1] + nums + [1]
3 memo = {}
4
5 def dp(left, right):
6 if left + 1 == right:
7 return 0
8 if (left, right) in memo:
9 return memo[(left, right)]
10 ans = 0
11 for i in range(left + 1, right):
12 ans = max(ans, nums[left] * nums[i] * nums[right] + dp(left, i) + dp(i, right))
13 memo[(left, right)] = ans
14 return ans
15
16 return dp(0, len(nums) - 1)
This Python solution uses a memoized recursive approach. We define the function dp(left, right)
to compute the maximum coins that can be obtained from balloons between left
and right
. The base case is when there are no balloons to burst between left
and right
. For each possible balloon i
to burst, we maximize our coins by considering bursting i
last in that subarray and adding the result from recursive calls to the left and right subproblems.
In this approach, we use a DP table to systematically build up solutions from smaller problems to a larger one without recursion. We create a dynamic programming matrix dp
where dp[left][right]
indicates the max coins to be obtained from subarray nums[left:right]
. For each subarray defined by len
, we consider bursting each possible k
as the last balloon and compute the result using previously computed results.
Time Complexity: O(n^3)
Space Complexity: O(n^2)
1def
The Python solution uses a bottom-up dynamic programming table to iterate through all subarray lengths from 3 upwards since we initially padded the nums
array. This way, we are able to systematically determine the most coins by considering each k
element in this sub-array as the last balloon to burst and combining results from smaller subproblems.