动态规划(斐波那契系列)---爬楼梯

动态规划

??递归和动态规划都是将原问题拆成多个子问题然后求解,他们之间最本质的区别是,动态规划保留了子问题的解,避免了重复计算。

爬楼梯

70. Climbing Stairs (Easy)

题目描述:

??有 N 阶楼梯,每次可以上一阶或者两阶,求有多少种上楼梯的方法。

思路分析:

??定义一个dp数组存储上楼梯的方法数,dp[i]表示走到第i层楼的方法数,第i层楼梯可以从第i-1层和i-2个楼梯再走一步到达。那么走到第i层楼梯的方式为走到第i-1层的方式和第i-2层的方式和。

dp[ i ]=dp[i-1]+dp[i-2]

代码:

class Solution {
    public int climbStairs(int n){
    int []dp=new int[n+1];
    if(n==1)
        return 1;
    if(n==2)
        return 2;
    dp[1]=1;
    dp[2]=2;
    for(int i=3;i<=n;i++){
        dp[i]=dp[i-1]+dp[i-2];
    }
    return dp[n];
}
}

原文地址:https://www.cnblogs.com/yjxyy/p/11116289.html

时间: 2024-11-07 07:15:54

动态规划(斐波那契系列)---爬楼梯的相关文章

4.1 斐波那契系列问题的递归和动态规划

[题目]: 给定整数N,返回斐波那契数列的第N项 [补充题目1]: 给定整数N,代表台阶数,一次可以跨2个或者1个台阶,返回有多少种走法 举例: N=3,可以三次都跨1个台阶:也可以先跨2个台阶,再跨1个台阶:还可以先跨1个台阶,再跨2个台阶.所以有三种走法,返回3 [补充题目2]: 假设农场中成熟的母牛每年只会生1头小母牛,并且永远不会死.第一年农场有1只成熟的母牛,从第二年开始,母牛开始生小母牛.每只小母牛3年之后成熟又可以生小母牛.给定整数N,求出N年后牛的数量 举例: N=6, 第1年1

斐波拉契数列、楼梯问题、奶牛问题

斐波拉契数列:波那契数列,又称黄金分割数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.34.--在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)[from 百度百科 http://baike.baidu.com/link?url=8LKtKTAllUGDMe610zIO0DAjS3CCeAOpXiCFvH_Y47_I_XDRgzyGcrzsodd1OHO726FJNPWkqzkQC7PIuGu_

剑指offer 斐波那契系列

目录 T9-斐波那契用迭代 跳台阶 动规 py2 变态跳台阶 wo的初始迭代方法 数学--移位 py2 矩形覆盖 动规 Py2 T9-斐波那契用迭代 跳台阶 动规 py2 # -*- coding:utf-8 -*- class Solution: def jumpFloor(self, number): # write code here if number<0: return -1 if number <=2: return number a,b=1,2 res = 0 for i in

70. 爬梯子问题(斐波那契数列)Climbing Stairs

You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top? 假设你在爬一个楼梯,该楼梯有n阶,你有两种爬法,每次爬一阶或者两阶.请问你有多少种爬法到达楼梯顶部. public int ClimbStairs(int n) { i

Fibonacci斐波拉契数列----------动态规划DP

n==10 20 30 40 50 46 体验一下,感受一下,运行时间 #include <stdio.h>int fib(int n){ if (n<=1)     return 1; else            return fib(n-1)+fib(n-2); }int main( ){ int n; scanf("%d",&n); printf("%d\n" ,fib(n) );} 先 n==10 20 30 40 50 46

高级算法——动态规划(斐波那契函数实例)

//使用递归去解决问题虽然简洁, 但效率不高,转为动态规划较好 function recurFib(n) {//斐波那契数列——递归 if (n <= 2) { return 1; } else { return recurFib(n - 1) + recurFib(n - 2); } } function dynFib(n) {//斐波那契数列——动态规划 var val = []; if (n == 1 || n == 2) { return 1; } else { val[1] = 1;

算法——动态规划篇——斐波那契数列

斐波那契数列,又称黄金分割数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.--在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)在现代物理.准晶体结构.化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1960年代起出版了<斐波纳契数列>季刊,专门刊载这方面的研究成果. 以上内容来自百度百科.. 今天主要是想用动态规划的思想求解斐波那契数列,用来观察动态规划带来的优势,空间换时间,不重复求解

超级楼梯-斐波那契数列的运用

Problem Description 有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法? Input 输入数据首先包含一个整数N,表示测试实例的个数,然后是N行数据,每行包含一个整数M(1<=M<=40),表示楼梯的级数. Output 对于每个测试实例,请输出不同走法的数量 Sample Input 2 2 3 Sample Output 1 2 每次有2种走法,并且要求最后还能干好到达M级.正着不行,逆向思维一下,要达到最后一级的前一级只能是M-

数楼梯——恶心的高精斐波那契数列

题目描述 楼梯有N阶,上楼可以一步上一阶,也可以一步上二阶. 编一个程序,计算共有多少种不同的走法. 输入输出格式 输入格式: 一个数字,楼梯数. 输出格式: 走的方式几种. 输入输出样例 输入样例#1: 4 输出样例#1: 5 说明 用递归会太慢,需用递推 (60% N<=50 ,100% N<=5000) 啊啊,数据太大了! 肿么办?! 当数据等于5000时的斐波那契数为 62763028004889570860352531083496840554785287027364574390258