【leetcode】 面试题 08.01. 三步问题

一、题目

        三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。

【leetcode】 面试题 08.01. 三步问题_第1张图片

二、解题思路

动态转移方程:
        fp[n]=fp[n-3]+fp[n-2]+fp[n-1]
初始化:
        fp[0]=0;
        fp[1]=1;
        fp[2]=2;
        fp[3]=4;

三、代码

class Solution {
    public int waysToStep(int n) {
        if(n==1){
            return 1;
        }
        if(n==2){
            return 2;
        }
        if(n==3){
            return 4;
        }
        int fp[]=new int[n+1];
        fp[0]=0;
        fp[1]=1;
        fp[2]=2;
        fp[3]=4;

        for(int i=4;i<=n;i++){
            fp[i]=((fp[i-3]+fp[i-2])%1000000007+fp[i-1])%1000000007;
        }

		return fp[n];
    }
}

四、运行结果

【leetcode】 面试题 08.01. 三步问题_第2张图片

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