解题(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-1]次
 6 //同理 case2,A[k-1], case3 A[k-3]
 7 //从而有: A[k] = A[k-3] + A[k-2] + A[k-1]
 8 class GoUpstairs {
 9 public:
10     int countWays(int n) {
11         long long resMid;
12         long long frontWay[3] = { 1, 2, 4 };
13         if (n < 4) return frontWay[n - 1];
14         for (int i = 3; i < n; i++){
15             long long temp = frontWay[0] + frontWay[1] + frontWay[2];
16             frontWay[0] = frontWay[1];
17             frontWay[1] = frontWay[2];
18             frontWay[2] = temp;
19             if (frontWay[2] > 1000000007){
20                 frontWay[2] = frontWay[2] % 1000000007;
21             }
22         }
23         int res = frontWay[2] % 1000000007;
24         return res;
25     }
26 };
 借鉴自牛客网友  原文链接:https://www.nowcoder.com/questionTerminal/7f0661ace6df48d0af3f924950d57126

原文地址:https://www.cnblogs.com/hzy1234/p/9589040.html

时间: 2024-10-13 10:18:28

解题(GoUpstairs -- 上楼梯)的相关文章

上楼梯

题目描述 有个小孩正在上楼梯,楼梯有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;

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

初学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

递归----小白上楼梯

题目:小白正在上楼梯,楼梯有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 <<

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

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

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