Leetcode_70_Climbing Stairs
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/41851705
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?
思路:
(1)题意为有一个n阶的梯子,一次你只能上一个或两个台阶,求你有多少种上台阶的方法。这道题其实很简单,就看你能不能想到它和某一个挺有名数列之间的联系,其考察我们发现规律和对常见数学数列理解的能力。
(2)这里我们不妨列举,并从中发现规律:
当n=1时,ways=1
当n=2时,有[2] [1,1]两种情况,ways=2
当n=3时,有[1,1,1] [1,2] [2,1]三种情况,ways=3
当n=4时,有[1,1,1,1] [2,2] [1,1,2] [1,2,1] [2,1,1]五种情况,ways=5
当n=5时,有[1,1,1,1,1] [2,2,1] [2,1,2] [1,2,2] [1,1,1,2] [1,1,2,1] [1,2,1,1] [2,1,1,1]八种情况,ways=8
(3)这样我想你一眼就能看出规律了,当n>3时,n对应的情况数字为n-1和n-2之和。此时,规律正好和斐波那契数列出现的规律对应。
(4)斐波拉切数列是这样一个数列:1、1、2、3、5、8、13、21、……在数学上,其被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2)
(5)这样,我们就能够用递归的方法求得结果了。其实,很多题目看似挺难的样子,可能一时半刻想不到好的解题思路,就像这道题一样,刚开始我也没啥头绪,后来我就尝试先列举一排数字看看结果,然后就发现这不正好和斐波拉切数列对应的么,知道斐波拉切数列,结果也就出来了。所以我建议大家遇到看似挺难的题时,要去分析题目,一步步去理解,可能答案在你分析的过程中就会浮现出来,不要放弃。
(6)注:斐波拉切数列的另一种常见表述为“生兔子问题”。之前遇到的好多校招笔试题中都会出现这个题目,所以找工作同学可以多关注一下这个数列。其算法实现用递归很容易实现。希望对你有所帮助。谢谢。
算法代码实现如下所示:
public int climbStairs(int num) {
//该题目和斐波拉切数列、生兔子问题属于同一类问题
// 如果定义为 int则num=46时会越界;如果定义为long则num=92时会越界
if (num <= 0)
return 0;
int[] sum = new int[num+1];
for (int i = 0; i <= num; i++) {
if (i == 0)
sum[i] = 1;
if (i == 1)
sum[i] = 1;
if (i > 1) {
sum[i] = sum[i - 1] + sum[i - 2];
}
}
return sum[num];
}
Leetcode_70_Climbing Stairs的更多相关文章
- [LeetCode] Climbing Stairs 爬梯子问题
You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb ...
- [LintCode] Climbing Stairs 爬梯子问题
You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb ...
- Leetcode: climbing stairs
July 28, 2015 Problem statement: You are climbing a stair case. It takes n steps to reach to the top ...
- LintCode Climbing Stairs
You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb ...
- 54. Search a 2D Matrix && Climbing Stairs (Easy)
Search a 2D Matrix Write an efficient algorithm that searches for a value in an m x n matrix. This m ...
- Climbing Stairs
Climbing Stairs https://leetcode.com/problems/climbing-stairs/ You are climbing a stair case. It tak ...
- 3月3日(6) Climbing Stairs
原题 Climbing Stairs 求斐波那契数列的第N项,开始想用通项公式求解,其实一个O(n)就搞定了. class Solution { public: int climbStairs(int ...
- Cllimbing Stairs [LeetCode 70]
1- 问题描述 You are climbing a stair case. It takes n steps to reach to the top. Each time you can eithe ...
- leetCode 70.Climbing Stairs (爬楼梯) 解题思路和方法
Climbing Stairs You are climbing a stair case. It takes n steps to reach to the top. Each time you ...
随机推荐
- 智能指针之 unique_ptr
对于动态申请的内存,C++语言为我们提供了new和delete运算符, 而没有像java一样,提供一个完整的GC机制,因此对于我们申请的动态内存, 我们需要时刻记得释放,且不能重复释放,释放后不能再去 ...
- Node.js Query Strings
Query String 稳定性: 3 - 稳定 这个模块提供了一些处理 query strings 的工具,包括以下方法: querystring.stringify(obj[, sep][, eq ...
- PHP While 循环
PHP 循环 - While 循环 循环执行代码块指定的次数,或者当指定的条件为真时循环执行代码块. PHP 循环 在您编写代码时,您经常需要让相同的代码块一次又一次地重复运行.我们可以在代码中使用循 ...
- Ubuntu命令行启动Matlab
原文转自:http://blog.csdn.net/striker_v/article/details/52884485 小编安装的是Matlab R2015b,使用的是默认安装目录,安装在目录/us ...
- ICL Auto Vectorization
简介 此文简单介绍如何使用intel c++编译器实现向量化加速. 全文如下安排: base : 待优化的源代码. vectorization : 第一个向量化版本. aligned : 内存对其对向 ...
- 剑指Offer——顺丰笔试题+知识点总结
剑指Offer--顺丰笔试题+知识点总结 情景回顾 时间:2016.10.16 19:00-20:40 地点:山东省网络环境智能计算技术重点实验室 事件:顺丰笔试 知识点总结 快排 霍尔排序(快排) ...
- Python 3.3.3 使用requests模拟登录网站
在模拟登录上,requests确实比python标准库中的相关模块更加简洁. 假设你需要去爬一组页面(targetUrls),而这些页面要登录才能进行访问.那么requests能够提供一种相当简单的语 ...
- 阻塞IO服务器模型之单线程服务器模型
单线程服务器模型是最简单的一个服务器模型,几乎我们所有程序员在刚开始接触网络编程(不管是B/S结构还是C/S结构)都是从这个简单的模型开始.这种模型只提供同时一个客户端访问,多个客户端访问必须要等到前 ...
- Spring入门介绍-IOC(二)
浅谈IOC IOC(inversion of control)是Spring的核心,贯穿始终.所谓IOC 就是有Spring来控制对象的生命周期和对象间的关系. 传统开发模式:对象之间相互依赖 IOC ...
- 【移动开发】AIDL中callback的实现
AIDL实现就可以在客户端中调用服务端的方法,并传递数据到服务端,也可以服务端传递数据过来:但是如果要从服务端去调用客户端的方法,那么就需要注册callback! 抄自和源码:http://zxl-o ...