• Lc70_爬楼梯2_完全背包揭解法


    
    package com.example.leetcode;
    
    /**
     * @description:
     *
     * 70. 爬楼梯
     * 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
     *
     * 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
     *
     * 注意:给定 n 是一个正整数。
     *
     * 示例 1:
     *
     * 输入: 2
     * 输出: 2
     * 解释: 有两种方法可以爬到楼顶。
     * 1.  1 阶 + 1 阶
     * 2.  2 阶
     * 示例 2:
     *
     * 输入: 3
     * 输出: 3
     * 解释: 有三种方法可以爬到楼顶。
     * 1.  1 阶 + 1 阶 + 1 阶
     * 2.  1 阶 + 2 阶
     * 3.  2 阶 + 1 阶
     *
     * @author: licm
     * @create: 2021-06-02 10:33
     **/
    public class Lc70_爬楼梯2 {
        /**
         * 采用背包的思路
         *
         * 1.dp[i] 代表都对应下标题 爬楼梯的可能方法
         * 2.递推公式 dp[i]的来源有 dp[i-1]...dp[i-j]
         * 3.初始化 dp[0]=1
         * 4.遍历顺序 target放外循环 每一步可以走多次 内循环从前往后遍历
         * 5.推导结果。。。
         * @param n
         * @return
         */
        public static int climbStairs(int n) {
            int[] dp = new int[n+1];
            dp[0]=1;
            int[] weight = {1,2};
            for (int i = 1; i <= n; i++) {
                for (int j = 0; j <weight.length; j++) {
                    if(i>=weight[j]){
                        dp[i]+=dp[i-weight[j]];
                    }
                }
            }
            return dp[n];
        }
    
        public static void main(String[] args) {
            System.out.println(climbStairs(1));
        }
    }
    
    
    不会,我可以学;落后,我可以追赶;跌倒,我可以站起来!
  • 相关阅读:
    P6007 [USACO20JAN]Springboards G
    CF1000F One Occurrence
    P6100 [USACO19FEB]Painting the Barn G
    P5838 [USACO19DEC]Milk Visits G
    P4085 [USACO17DEC]Haybale Feast
    P4267 [USACO18FEB]Taming the Herd
    P1712 [NOI2016]区间
    CF786B Legacy
    P5665 划分
    NOI2020网上同步赛 游记
  • 原文地址:https://www.cnblogs.com/xiaoshahai/p/14840481.html
Copyright © 2020-2023  润新知