|
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