LeetCode 70 Climbing Stairs(爬楼梯)(动态规划)(*)
翻译
你正在爬一个楼梯。
它须要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(爬楼梯)(动态规划)(*)的更多相关文章
- [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 ...
- [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 ...
- Leetcode 70. Climbing Stairs 爬楼梯 (递归,记忆化,动态规划)
题目描述 要爬N阶楼梯,每次你可以走一阶或者两阶,问到N阶有多少种走法 测试样例 Input: 2 Output: 2 Explanation: 到第二阶有2种走法 1. 1 步 + 1 步 2. 2 ...
- 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 ...
- [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 ...
- Climbing Stairs爬楼梯——动态规划
题目描写叙述: 初阶:有n层的台阶,一開始你站在第0层,每次能够爬两层或者一层. 请问爬到第n层有多少种不同的方法? 进阶:假设每次能够爬两层.和倒退一层,同一个位置不能反复走,请问爬到第n层有多少种 ...
- 70. Climbing Stairs爬楼梯
网址:https://leetcode.com/problems/climbing-stairs/ 其实就是斐波那契数列,没什么好说的. 注意使用3个变量,而不是数组,可以节约空间. class So ...
- Leetcode#70. Climbing Stairs(爬楼梯)
题目描述 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2 输出: 2 解 ...
- 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 ...
- 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 ...
随机推荐
- 【itercast OSI 七层网络模型 学习笔记】Layer 1 物理层
NIC:网卡(基本上是一层功能) 传输介质:以太网,分有线和无线 开始以太网只有10Mbps的吞吐量,使用的是带有冲突检测的载波侦听多路访问(CSMA/CD,Carrier Sense Multipl ...
- HTML-获取/修改html页面标题
作为一个标准的HTML文档,网页标题(title)是必不可少的属性.随着浏览器的发展,我们又多了一种访问和修改文档的方式:DOM.所以我们获取网页标题的方式大致可分为以下两种: 通过document对 ...
- 转: SSH 公钥认证
转: http://blog.knownsec.com/2012/05/ssh-%E5%85%AC%E9%92%A5%E8%AE%A4%E8%AF%81/ SSH 公钥认证 2012-05-15 简介 ...
- [Functional Programming] Async IO Functor
We will see a peculiar example of a pure function. This function contained a side-effect, but we dub ...
- (剑指Offer)面试题47:不用加减乘除做加法
题目: 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 思路: 很容易想到通过位运算来解决问题. 以5+17=22为例,参考十进制加法:1.只做各位相加不进位运算,即得 ...
- [Unity3D]Unity3D游戏开发之异步记载场景并实现进度条读取效果
大家好,我是秦元培.欢迎大家关注我的博客,我的博客地址是:blog.csdn.net/qinyuanpei.终于在各种无语的论文作业中解脱了,所以立即抓紧时间来这里更新博客.博主本来计划在Unity3 ...
- UNIX环境编程初步认识——编程环境搭建
前言 前期学习了Linux的一些基本知识后,在借助前期的学习的基础上想再初步认识一下操作系统的一些环境编程体系相关知识,当中环境的配置和搭建费了非常大的劲,须要一点点摸索和尝试,下边是环境搭建的 ...
- Java泛型中extends和super的理解
作者:zhang siege链接:https://www.zhihu.com/question/20400700/answer/91106397来源:知乎著作权归作者所有.商业转载请联系作者获得授权, ...
- Java反射机制及Method.invoke详解
JAVA反射机制 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的信息以及动态调用对象的方法的功能称为ja ...
- jquery 入门与知识
一)什么是jQuery? [以封装的思想,重构<<图片显示和隐藏>>] 第三方组织预先写好的一些实用JS文件.类,方法,都统称为JS实用库,免费放在网上,同时配有相关的学习文档 ...