博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode 70. Climbing Stairs
阅读量:5023 次
发布时间:2019-06-12

本文共 1141 字,大约阅读时间需要 3 分钟。

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层阶梯情况下,走到顶端的路径种数(要求每次只能上1层或者2层阶梯)。 这是一个动态规划的题目:

n = 1 时  ways = 1;

n = 2 时  ways = 2;

n = 3 时  ways = 3;

n = k 时  ways = ways[k-1] + ways[k-2];

 

明显的,这是著名的斐波那契数列问题。有递归和非递归两种方式求解

Solving this problem by recursion ,we will do a lot of same recursion. Example: F(10)=F(9)+F(8); F(9)=F(8)+F(7); we calculate F(8) twice,when n is large,this will increase as a rate of n's exponent.

So a more efficient way to solve this problem is from Bottom to Top. Calculate F(0) ,F(1); then F(2).........

(n >= 3)时,只要保存dp[n-1]和dp[n-2]就够了,没必要保存前面的值

1 class Solution { 2 public: 3     int climbStairs(int n) { 4         int dp[3],temp; 5         dp[0] = 0; 6         dp[1] = 1; 7         dp[2] = 2; 8         if(n <= 2) 9             return dp[n];10         for(int i = 3; i <= n; i++){11             temp = dp[1] + dp[2];12             dp[1] = dp[2];13             dp[2] = temp;14         }15         return dp[2];16     }17 };

 

转载于:https://www.cnblogs.com/qinduanyinghua/p/5732911.html

你可能感兴趣的文章
luogu1373 小a和uim之大逃离 (dp)
查看>>
Redis的Pub/Sub客户端实现
查看>>
SQL日常问题和技巧——持续更新
查看>>
springMVC入门(一)------springMVC基本概念与安装
查看>>
Sam做题记录
查看>>
[bzoj] 2453 维护数列 || 单点修改分块
查看>>
IIS版本变迁
查看>>
BZOJ3884: 上帝与集合的正确用法 拓展欧拉定理
查看>>
mybatis09--自连接一对多查询
查看>>
myeclipse10添加jQuery自动提示的方法
查看>>
【eclipse jar包】在编写java代码时,为方便编程,常常会引用别人已经实现的方法,通常会封装成jar包,我们在编写时,只需引入到Eclipse中即可。...
查看>>
视频监控 封装[PlayCtrl.dll]的API
查看>>
软件工程APP进度更新
查看>>
Python 使用正则替换 re.sub
查看>>
CTF中那些脑洞大开的编码和加密
查看>>
简化工作流程 10款必备的HTML5开发工具
查看>>
c++ 调用外部程序exe-ShellExecuteEx
查看>>
Java进击C#——语法之知识点的改进
查看>>
IdentityServer流程图与相关术语
查看>>
BirdNet: a 3D Object Detection Framework from LiDAR information
查看>>