9.1---上楼梯(CC150)

注意:错误主要在溢出问题上。所以不设置int,而是long。

    public static int countWays(int n){
        if(n == 1) return 1;
        if(n == 2) return 2;
        if(n == 3) return 4;
        long[] dp = new long[n];
        dp[0] = 1;
        dp[1] = 2;
        dp[2] = 4;
        for(int i = 3; i < n; i++){
            dp[i] = (dp[i-1] + dp[i-2] + dp[i-3])%1000000007;
        }
        return (int) (dp[n - 1] % 1000000007);
    }
时间: 2024-10-18 10:19:45

9.1---上楼梯(CC150)的相关文章

上楼梯

题目描述 有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶.2阶.3阶.请实现一个方法,计算小孩有多少种上楼的方式.为了防止溢出,请将结果Mod 1000000007 给定一个正整数int n,请返回一个数,代表上楼的方式数.保证n小于等于100000. 测试样例: 1 返回:1 class GoUpstairs { public: int countWays(int n) { // write code here int a[100000]; for(int i=0;i<=100000;

初学LUA—实现上楼梯算法

题目:楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,编一程序列出每一种走法. 要求是使用递归和迭代两种不同的方法来实现.对于我这个算法又渣也没接触过LUA的人来说,真是有点脑子不够用了!! ' 捣鼓了一整天,了解LUA语法,各种google百度,暂且只能弄出递归解法,至于迭代,还得好好理解理解! --递归 function walkStairs(remainingSteps,currentSteps) if remainingSteps<=2 then printWalkWays(rem

9.9递归和动态规划(一)——小孩上楼梯的方式的种类

/** * 功能:有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶.2阶或3阶.计算小孩上楼梯的方式有多少种. */ 两种方法: 方法一: //递归法 /** * 思路:自上而下的方式. * 最后一步可能是从第n-1阶往上走1阶.从第n-2阶往上走2阶或从第n-3阶往上走3阶. * 因此,抵达最后一阶的走法,抵达这最后三阶的方式的综合. * @param n * @return */ public static int countWays(int n){ if(n<0) return 0;

JUMP上楼梯游戏IOS源码

基于cocos2d-x的简单JUMP上楼梯游戏,配有音效.适合新接触cocos2d的同学学习.规则类似 “是男人就上100层”的经典小游戏,就是控制宝宝通过跳上不同高度的踏板而慢慢升高. <ignore_js_op> <ignore_js_op> 详细说明:http://ios.662p.com/thread-1711-1-1.html

18.上楼梯

题目描述 有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶.2阶.3阶.请实现一个方法,计算小孩有多少种上楼的方式.为了防止溢出,请将结果Mod 1000000007 给定一个正整数int n,请返回一个数,代表上楼的方式数.保证n小于等于100000. 测试样例:1 返回:1代码如下: import java.util.*; public class GoUpstairs { public int countWays(int n) { int n1=1; int n2=2; int n3

解题(GoUpstairs -- 上楼梯)

题目描述 有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶.2阶.3阶.请实现一个方法,计算小孩有多少种上楼的方式.为了防止溢出,请将结果Mod 1000000007 给定一个正整数int n,请返回一个数,代表上楼的方式数.保证n小于等于100000. 测试样例: 1 返回:1 代码如下: 1 2 3 4 //对于上k级台阶,当k>3时,由于每次可以上1,2,3级,则最后一次应该是上1,2,3中的一个 5 //case1,最后一次上1级,也即前面上了k-1级,k-1级的可能情况为:A[k

递归----小白上楼梯

题目:小白正在上楼梯,楼梯有n阶台阶,小白一次可以上1阶,2阶或者3阶,实现一个方法,计算小白有多少种走完楼梯的方式. 思路:这种题目一般从最后结果入手,逆推,假如小白已经在最顶端,那么有f(n)种方式走完所有楼梯,有f(n-1)种方式走完倒数第一个楼梯,有f(n-2)种方式走完倒数第二个楼梯,有f(n-3)种方式走完倒数第三个楼梯.那么递推公式为f(n)=f(n-1)+f(n-2)+f(n-3). 代码: import java.util.Scanner; public class 小白上楼梯

上楼梯问题(递归C++)

[问题描述] 小明上楼梯,一次可以迈1步,2步和3步,假设楼梯共有n个台阶,输出他所有的走法. [代码展示] #include<iostream>using namespace std;int a[100];void louti(int index,int n){ //递归边界:满足条件则输出行走步数 if(n==0){ for(int i=0;i<index;i++){ cout << a[i] << " "; } cout <<

100003. 上楼梯

题目描述 楼梯有N级台阶,上楼可以一步上一级台阶,也可以一步上两级台阶.编一程序,计算共有多少种不同的走法. 输入 一行,一个整数n(1 <= n <= 30),表示台阶的级数 输出 一个整数,走法的种数 样例输入 3 样例输出 3 方案1:走三次,每次一步 方案2:先走一级,再走两级 方案3:先走两级,再走一次 数据范围限制 1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 int a[1

上楼梯问题,斐波那契数列

问题描述: 有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或者二级,要走上m级,共有多少走法?注:规定从一级到一级有0种走法.给定一个正整数int n,请返回一个数,代表上楼的方式数.保证n小于等于100.为了防止溢出,请返回结果Mod 1000000007的值. 算法思路:这道题其实就是斐波那契数列的应用,因为可以走一步,又可以走两步,开始在第一层台阶.所以,上第二层台阶,有1种方法,上第三层台阶,有2种方法,上后一层,可以通过前一层再走1步,前两层再走2步.所以,就是f(x)= f(