代码随想录算法训练营第四十五天 |70. 爬楼梯 (进阶) 322. 零钱兑换 279.完全平方数

70. 爬楼梯

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 12 个台阶。你有多少种不同的方法可以爬到楼顶呢?

输入:n = 2
输出:2
解释:有两种方法可以爬到楼顶。
1. 1+ 12. 2

之前使用动态规划完成过这道题,当时的递推公式为dp[j]=dp[j-2]+dp[j-1]

但是这道题也可以使用背包问题去解决,weight={1,2} 背包大小就是n阶

利用背包问题的求解的动规五部曲:

  1. 确定dp及其下标含义

dp[i]表示爬i阶楼梯时一共有dp[i]种方法

  1. 确定递推公式

之前组合总和的时候递推公式为dp[i]+=dp[i-nums[j]]

所以该题的递推公式可以为dp[i]+=dp[i-weight[j]]

  1. dp数组初始化

需要将dp[0]=1否则后续的计算会全部为0

  1. dp数组遍历顺序

外层循环为背包,内层循环为物品

  1. 举例确定dp数组

    n=3时

    dp[0]=1

    dp[1]=dp[0]=1

    dp[2]=dp[1]+dp[0]=2

    dp[3]=dp[0]+dp[1]+dp[2]=3

class Solution {
   
    public int climbStairs(int n) {
   
        int[] dp=new int[n+1];
        dp[0]=1;
        int[] weight={
   1,2};
        for(int i=0;i<=n;i++){
   
            for

你可能感兴趣的:(算法,动态规划,数据结构)