代码随想录 Day45 - 动态规划(七)
 作者:jjn0703
- 2023-08-20  江苏
 本文字数:1371 字
阅读完需:约 4 分钟
70. 爬楼梯
使用完全背包的思想,重新实现爬楼梯的题目。每一次可选的步数设置为完全背包的选项。
package jjn.carl.dp;
import java.util.Scanner;
/** * @author Jiang Jining * @since 2023-08-20 23:11 */public class LeetCode70_ClimbStairs {    public int climbStairs(int n) {        int[] dp = new int[n + 1];        dp[0] = 1;        for (int i = 1; i <= n; i++) {            for (int j = 1; j <= 2; j++) {                if (i >= j) {                    dp[i] += dp[i - j];                }            }        }        return dp[n];    }        public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        int n = scanner.nextInt();        int stairs = new LeetCode70_ClimbStairs().climbStairs(n);        System.out.println(stairs);    }}
复制代码
 322. 零钱兑换
dp 数组不能初始化为 Integer.MAX_VALUE,因为有+1 的操作,可能在某些 case 上就越界了。
package jjn.carl.dp;
import java.util.Arrays;import java.util.Scanner;
/** * @author Jiang Jining * @since 2023-08-20 23:33 */public class LeetCode322 {    public int coinChange(int[] coins, int amount) {        int[] dp = new int[amount + 1];        Arrays.fill(dp, 10001);        dp[0] = 0;        for (int i = 0; i <= amount; i++) {            for (int j = 0; j < coins.length; j++) {                if (i >= coins[j]) {                    dp[i] = Math.min(dp[i], dp[i - coins[j]] + 1);                }            }        }        return dp[amount] == 10001 ? -1 : dp[amount];    }        public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        int coinNum = scanner.nextInt();        int amount = scanner.nextInt();        int[] coins = new int[coinNum];        for (int i = 0; i < coinNum; i++) {            coins[i] = scanner.nextInt();        }        int coinChange = new LeetCode322().coinChange(coins, amount);        System.out.println(coinChange);    }}
复制代码
 279. 完全平方数
完全背包的运用题目。
package jjn.carl.dp;
import java.util.Arrays;import java.util.Scanner;
/** * @author Jiang Jining * @since 2023-08-20 22:59 */public class LeetCode279 {        public int numSquares(int n) {        int[] dp = new int[n + 1];        Arrays.fill(dp, Integer.MAX_VALUE);        dp[0] = 0;        int max = (int) Math.sqrt(n);        for (int i = 1; i <= max; i++) {            for (int j = i * i; j <= n; j++) {                dp[j] = Math.min(dp[j], dp[j - i * i] + 1);            }        }        return dp[n];    }        public static void main(String[] args) {        Scanner scanner = new Scanner(System.in);        int n = scanner.nextInt();        int numSquares = new LeetCode279().numSquares(n);        System.out.println(numSquares);    }}
复制代码
 划线
评论
复制
发布于: 刚刚阅读数: 3
jjn0703
关注
Java工程师/终身学习者 2018-03-26 加入
USTC硕士/健身健美爱好者/Java工程师.










    
评论