翻译

你正在爬一个楼梯。

它须要n步才干究竟顶部。

每次你能够爬1步或者2两步。

那么你有多少种不同的方法爬到顶部呢?

原文

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?

分析

动态规划基础题,首先设置3个变量用于转换:

int dp1 = 1, dp2 = 2, dpWay = 0;

依据题意,一次仅仅能是一步或两步。所以当n等于2时,有两种走法:1+1,2。

if (n <= 1) return dp1;
if (n == 2) return dp2;

从3開始,由于能够直接获得它的步数结果。所以直接写成:

while ((n--)-2) {
}

终于里面的变化方式为:

dpWay = dp1 + dp2;
dp1 = dp2;
dp2 = dpWay;

上一篇博客:LeetCode 206 Reverse Linked List(反转链表)(四步将递归改写成迭代)(*) ,介绍了怎样将递归改写成迭代,看过的童鞋应该会认为很easy的。那么这里再来转换一次:

int climbStairsIter(int n,  int dpWay,int dp1, int dp2) {
if (n <= 1) return dp1;
if (n == 2) return dp2;
if ((n--) - 2) {
dpWay = dp1 + dp2;
dp1 = dp2;
dp2 = dpWay;
return climbStairsIter(n, dpWay, dp1, dp2);
}
else return dpWay;
} int climbStairs(int n) {
return climbStairsIter(n, 0,1,2);
}

由于这里的參数涉及到运行前面顺序,所以不妨单独列出来了,只是这样看来略不简洁呐。

代码

class Solution {
public:
int climbStairs(int n) { int dp1 = 1, dp2 = 2, dpWay = 0;
if (n <= 1) return dp1;
if (n == 2) return dp2; while ((n--) - 2) {
dpWay = dp1 + dp2;
dp1 = dp2;
dp2 = dpWay;
}
return dpWay;
}
};

LeetCode 70 Climbing Stairs(爬楼梯)(动态规划)(*)的更多相关文章

  1. [LeetCode] 70. Climbing Stairs 爬楼梯问题

    You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb ...

  2. [LeetCode] 70. Climbing Stairs 爬楼梯

    You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb ...

  3. Leetcode 70. Climbing Stairs 爬楼梯 (递归,记忆化,动态规划)

    题目描述 要爬N阶楼梯,每次你可以走一阶或者两阶,问到N阶有多少种走法 测试样例 Input: 2 Output: 2 Explanation: 到第二阶有2种走法 1. 1 步 + 1 步 2. 2 ...

  4. LeetCode 70. Climbing Stairs爬楼梯 (C++)

    题目: You are climbing a stair case. It takes n steps to reach to the top. Each time you can either cl ...

  5. [leetcode]70. Climbing Stairs爬楼梯

    You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb ...

  6. Climbing Stairs爬楼梯——动态规划

    题目描写叙述: 初阶:有n层的台阶,一開始你站在第0层,每次能够爬两层或者一层. 请问爬到第n层有多少种不同的方法? 进阶:假设每次能够爬两层.和倒退一层,同一个位置不能反复走,请问爬到第n层有多少种 ...

  7. 70. Climbing Stairs爬楼梯

    网址:https://leetcode.com/problems/climbing-stairs/ 其实就是斐波那契数列,没什么好说的. 注意使用3个变量,而不是数组,可以节约空间. class So ...

  8. Leetcode#70. Climbing Stairs(爬楼梯)

    题目描述 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2 输出: 2 解 ...

  9. LN : leetcode 70 Climbing Stairs

    lc 70 Climbing Stairs 70 Climbing Stairs You are climbing a stair case. It takes n steps to reach to ...

  10. 42. leetcode 70. Climbing Stairs

    70. Climbing Stairs You are climbing a stair case. It takes n steps to reach to the top. Each time y ...

随机推荐

  1. React 同构思想

    作者:yangchunwen React比较吸引我的地方在于其客户端-服务端同构特性,服务端-客户端可复用组件,本文来简单介绍下这一架构思想. 出于篇幅原因,本文不会介绍React基础,所以,如果你还 ...

  2. 转:Eclipse ADT的Custom debug keystore所需证书规格

    转:http://blog.k-res.net/archives/1229.html Eclipse ADT的Custom debug keystore所需证书规格 三月 8, 2013  |  Po ...

  3. @Autowired注入了dao,为什么还要写getDao(){return userDao}这个方法?有什么作用?

    Autowired private UserDao userDao; @Override public BaseDao<User> getDao() { return userDao; } ...

  4. [NPM] Avoid Duplicate Commands by Calling one NPM Script from Another

    We can get a lot of utility through CLI tools invoked via npm scripts. Many of these tools have APIs ...

  5. javascript代码在线测试

    目前还不可用,有知道的怎么搞的,请告知我下,谢谢! alert("欢迎使用javascript在线测试工具");

  6. UNIX网络编程学习笔记:值-结果(value-result)参数

    前言 当把套接口地址结构传递给套接口函数时,总是通过指针来传递的,即传递的是一个指向结构的指针.结构的长度也作为参数来传递,其传递的方式取决于结构的传递方向:从进程到内核,还是从内核到进程. 1.从进 ...

  7. Docker随笔:Hyper-V PowerShell Module is not available报错解决方法

    当在win10使用docker-machine创建Hyper-v虚拟机时,返回了一个错误”Error with pre-create check: "Hyper-V PowerShell M ...

  8. 有关索引的DMV(转)

    转自:http://www.cnblogs.com/CareySon/archive/2012/05/17/2505981.html 1.查看那些被大量更新,却很少被使用的索引 SET TRANSAC ...

  9. 通过CSS3,实现元素覆盖效果

    在非常多站点中,我们都能够看到这种效果.当用户鼠标进入某一个元素后,下方就会有遮罩层上浮动画,如图: 今天我们就用hover伪类加上css3实现,没有使用不论什么JS <!DOCTYPE htm ...

  10. (四)hibernate关联映射之——一对多映射

    0.   映射分四种类型: 一对多 多对一 一对一 多对多 前两者最常用 1.单向一对多关联 1.1  如何在JAVA和数据库中表示一对多的关系. 2.多对一关联 以学生对应班级来解释 步骤(1)创建 ...