1.思路

秒懂【爬楼梯】!动态规划一步步拆解。

本题的关键是套用动态规划的模板,对问题进行拆解。

具体思路是:

alt

如果文字描述的不太清楚,你可以参考视频的详细讲解B站@好易学数据结构

2.代码

2.1 Python代码

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param number int整型
# @return int整型
#
class Solution:
    def jumpFloor(self, number: int) -> int:
        # write code here
        if number == 1:
            return 1
        # 1. 定义状态.i: 第i个台阶; dp[i]: 跳到第i个台阶的跳法
        dp = [0] * (number + 1)
        # 2. 初始化边界条件:    dp[1] = 1,即第一个台阶只有1种跳法;dp[2] = 2,即第二个台阶有2种跳法;
        dp[1] = 1
        dp[2] = 2
        # 3. 确定递推公式: dp[i] = dp[i - 1] + dp[i - 2]
        for i in range(3, number + 1):
            # 到第i个台阶有2种方法:从第 i-1跳上来,或者从第 i-2跳上来
            dp[i] = dp[i - 1] + dp[i - 2]
        # 4.输出结果
        return dp[number]

2.2 Java代码

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param number int整型
     * @return int整型
     */
    public int jumpFloor (int number) {
        // write code here
        if (number == 1) {
            return 1;
        }
        //1.定义状态.   i:第i个台阶; dp[i]:跳到第i个台阶的跳法
        int[] dp = new int[number + 1];
        //2.初始化边界条件:    dp[1]=1,即第一个台阶只有1种跳法;dp[2]=2,即第二个台阶有2种跳法;
        dp[1] = 1;
        dp[2] = 2;
        //3.确定递推公式: dp[i]=dp[i-1]+dp[i-2]
        for (int i = 3; i <= number; i++) {
            //到第i个台阶有2种方法:从第 i-1跳上来,或者从第 i-2跳上来
            dp[i] = dp[i - 1] + dp[i - 2];
        }
        //4.输出结果
        return dp[number];
    }
}

2.3 Go代码

package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param number int整型
 * @return int整型
 */
func jumpFloor(number int) int {
	// write code here
	if number == 1 {
		return 1
	}
	//1.定义状态.	i:第i个台阶; dp[i]:跳到第i个台阶的跳法
	dp := make([]int, number+1)
	//2.初始化边界条件:	dp[1]=1,即第一个台阶只有1种跳法;dp[2]=2,即第二个台阶有2种跳法;
	dp[1] = 1
	dp[2] = 2
	//3.确定递推公式: dp[i]=dp[i-1]+dp[i-2]
	for i := 3; i <= number; i++ {
		//到第i个台阶有2种方法:从第 i-1跳上来,或者从第 i-2跳上来
		dp[i] = dp[i-1] + dp[i-2]
	}
	//4.输出结果
	return dp[number]
}

如果上面的代码理解的不是很清楚,你可以参考视频的详细讲解B站@好易学数据结构