@@ -138,12 +138,63 @@ public class Solution {
138
138
}
139
139
```
140
140
141
+ ``` go
142
+ func maxCoins (nums []int ) int {
143
+ nums = append ([]int {1 }, nums...)
144
+ nums = append (nums, 1 )
145
+
146
+ var dfs func (nums []int ) int
147
+ dfs = func (nums []int ) int {
148
+ if len (nums) == 2 {
149
+ return 0
150
+ }
151
+
152
+ maxCoins := 0
153
+ for i := 1 ; i < len (nums)-1 ; i++ {
154
+ coins := nums[i-1 ] * nums[i] * nums[i+1 ]
155
+ coins += dfs (append (append ([]int {}, nums[:i]...), nums[i+1 :]...))
156
+ if coins > maxCoins {
157
+ maxCoins = coins
158
+ }
159
+ }
160
+ return maxCoins
161
+ }
162
+
163
+ return dfs (nums)
164
+ }
165
+ ```
166
+
167
+ ``` kotlin
168
+ class Solution {
169
+ fun maxCoins (nums : IntArray ): Int {
170
+ val newNums = intArrayOf(1 ) + nums + intArrayOf(1 )
171
+
172
+ fun dfs (nums : IntArray ): Int {
173
+ if (nums.size == 2 ) {
174
+ return 0
175
+ }
176
+
177
+ var maxCoins = 0
178
+ for (i in 1 until nums.size - 1 ) {
179
+ val coins = nums[i - 1 ] * nums[i] * nums[i + 1 ]
180
+ val nextCoins = dfs(nums.take(i).toIntArray() +
181
+ nums.drop(i + 1 ).toIntArray())
182
+ maxCoins = maxOf(maxCoins, coins + nextCoins)
183
+ }
184
+ return maxCoins
185
+ }
186
+
187
+ return dfs(newNums)
188
+ }
189
+ }
190
+ ```
191
+
141
192
:: tabs-end
142
193
143
194
### Time & Space Complexity
144
195
145
- - Time complexity: $O(n* 2^n)$
146
- - Space complexity: $O(n* 2^n)$
196
+ * Time complexity: $O(n* 2^n)$
197
+ * Space complexity: $O(n* 2^n)$
147
198
148
199
---
149
200
@@ -314,12 +365,77 @@ public class Solution {
314
365
}
315
366
```
316
367
368
+ ``` go
369
+ func maxCoins (nums []int ) int {
370
+ nums = append ([]int {1 }, nums...)
371
+ nums = append (nums, 1 )
372
+ n := len (nums)
373
+
374
+ dp := make ([][]int , n)
375
+ for i := 0 ; i < n; i++ {
376
+ dp[i] = make ([]int , n)
377
+ }
378
+
379
+ var dfs func (l, r int ) int
380
+ dfs = func (l, r int ) int {
381
+ if l > r {
382
+ return 0
383
+ }
384
+ if dp[l][r] > 0 {
385
+ return dp[l][r]
386
+ }
387
+
388
+ dp[l][r] = 0
389
+ for i := l; i <= r; i++ {
390
+ coins := nums[l-1 ] * nums[i] * nums[r+1 ]
391
+ coins += dfs (l, i-1 ) + dfs (i+1 , r)
392
+ dp[l][r] = max (dp[l][r], coins)
393
+ }
394
+ return dp[l][r]
395
+ }
396
+
397
+ return dfs (1 , len (nums)-2 )
398
+ }
399
+
400
+ func max (a , b int ) int {
401
+ if a > b {
402
+ return a
403
+ }
404
+ return b
405
+ }
406
+ ```
407
+
408
+ ``` kotlin
409
+ class Solution {
410
+ fun maxCoins (nums : IntArray ): Int {
411
+ val newNums = intArrayOf(1 ) + nums + intArrayOf(1 )
412
+ val n = newNums.size
413
+ val dp = Array (n) { IntArray (n) }
414
+
415
+ fun dfs (l : Int , r : Int ): Int {
416
+ if (l > r) return 0
417
+ if (dp[l][r] > 0 ) return dp[l][r]
418
+
419
+ dp[l][r] = 0
420
+ for (i in l.. r) {
421
+ val coins = newNums[l - 1 ] * newNums[i] * newNums[r + 1 ]
422
+ val totalCoins = coins + dfs(l, i - 1 ) + dfs(i + 1 , r)
423
+ dp[l][r] = maxOf(dp[l][r], totalCoins)
424
+ }
425
+ return dp[l][r]
426
+ }
427
+
428
+ return dfs(1 , newNums.size - 2 )
429
+ }
430
+ }
431
+ ```
432
+
317
433
:: tabs-end
318
434
319
435
### Time & Space Complexity
320
436
321
- - Time complexity: $O(n^ 3)$
322
- - Space complexity: $O(n^ 2)$
437
+ * Time complexity: $O(n ^ 3)$
438
+ * Space complexity: $O(n ^ 2)$
323
439
324
440
---
325
441
@@ -451,10 +567,63 @@ public class Solution {
451
567
}
452
568
```
453
569
570
+ ``` go
571
+ func maxCoins (nums []int ) int {
572
+ n := len (nums)
573
+ newNums := append ([]int {1 }, nums...)
574
+ newNums = append (newNums, 1 )
575
+
576
+ dp := make ([][]int , n+2 )
577
+ for i := range dp {
578
+ dp[i] = make ([]int , n+2 )
579
+ }
580
+
581
+ for l := n; l >= 1 ; l-- {
582
+ for r := l; r <= n; r++ {
583
+ for i := l; i <= r; i++ {
584
+ coins := newNums[l-1 ] * newNums[i] * newNums[r+1 ]
585
+ coins += dp[l][i-1 ] + dp[i+1 ][r]
586
+ dp[l][r] = max (dp[l][r], coins)
587
+ }
588
+ }
589
+ }
590
+
591
+ return dp[1 ][n]
592
+ }
593
+
594
+ func max (a , b int ) int {
595
+ if a > b {
596
+ return a
597
+ }
598
+ return b
599
+ }
600
+ ```
601
+
602
+ ``` kotlin
603
+ class Solution {
604
+ fun maxCoins (nums : IntArray ): Int {
605
+ val n = nums.size
606
+ val newNums = intArrayOf(1 ) + nums + intArrayOf(1 )
607
+
608
+ val dp = Array (n + 2 ) { IntArray (n + 2 ) }
609
+
610
+ for (l in n downTo 1 ) {
611
+ for (r in l.. n) {
612
+ for (i in l.. r) {
613
+ val coins = newNums[l - 1 ] * newNums[i] * newNums[r + 1 ]
614
+ dp[l][r] = maxOf(dp[l][r], coins + dp[l][i - 1 ] + dp[i + 1 ][r])
615
+ }
616
+ }
617
+ }
618
+
619
+ return dp[1 ][n]
620
+ }
621
+ }
622
+ ```
623
+
454
624
:: tabs-end
455
625
456
626
### Time & Space Complexity
457
627
458
- - Time complexity: $O(n^3)$
459
- - Space complexity: $O(n^2)$
460
-
628
+ * Time complexity: $O(n^3)$
629
+ * Space complexity: $O(n^2)$
0 commit comments