|
2 | 2 |
|
3 | 3 | public class Main {
|
4 | 4 |
|
5 |
| - public int maxAreaOfIsland(int[][] grid) { |
6 |
| - int[] area = new int[1]; |
7 |
| - int max = 0; |
8 |
| - |
9 |
| - for (int i = 0; i < grid.length; i++) { |
10 |
| - for (int j = 0; j < grid[0].length; j++) { |
11 |
| - area[0] = 0; |
12 |
| - dfs(grid, i, j, area); |
13 |
| - max = Math.max(max, area[0]); |
| 5 | + public static int coinChange(int[] coins, int amount) { |
| 6 | + Arrays.sort(coins); |
| 7 | + int[] dp = new int[amount + 1]; |
| 8 | + Arrays.fill(dp, -1); |
| 9 | + dp[0] = 0; |
| 10 | + for (int i = 1; i <= amount; i++) { |
| 11 | + for (int coin: coins) { |
| 12 | + if (i - coin >= 0 && dp[i - coin] >= 0) { |
| 13 | + int k = dp[i - coin] + 1; |
| 14 | + dp[i] = dp[i] > 0 ? Math.min(dp[i], k) : k; |
| 15 | + } |
14 | 16 | }
|
15 | 17 | }
|
16 |
| - return max; |
17 |
| - } |
18 |
| - |
19 |
| - private void dfs(int[][] grid, int i, int j, int[] count) { |
20 |
| - if (i < 0 || i >= grid.length || j < 0 || j >= grid[0].length || grid[i][j] != 1) { |
21 |
| - return; |
22 |
| - } |
23 |
| - grid[i][j] = 0; |
24 |
| - count[0]++; |
25 |
| - dfs(grid, i + 1, j, count); |
26 |
| - dfs(grid, i - 1, j, count); |
27 |
| - dfs(grid, i, j + 1, count); |
28 |
| - dfs(grid, i, j - 1, count); |
| 18 | + return dp[amount]; |
29 | 19 | }
|
30 | 20 |
|
31 | 21 | public static void main(String[] args) {
|
32 |
| - |
| 22 | + System.out.println(coinChange(new int[] { |
| 23 | + 1, 2, 5 |
| 24 | + }, 11)); |
33 | 25 | }
|
34 | 26 | }
|
0 commit comments