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 ...
随机推荐
- 【DotNet加密方式解析】-- 好文收藏
By -- 彭泽 一. DotNet加密方式解析--散列加密 笔记: 散列加密种类: 1.MD5 128位 2.SHA-1 160位 3.SHA-256 256位 4.SHA-384 384位 ...
- exp和imp的工作原理
--1.exp和imp的输入都是名字和值对: 如:exp parameter_name=value 或exp parameter_name=(value1,value2,value3..) --2.e ...
- Python中如何将二维列表转换成一维列表
已知:a = [(4,2,3), (5, 9, 1), (7,8,9)]希望将二维列表转换成一维列表:["4,2,3", "5, 9, 1", "7, ...
- A potentially dangerous Request.Form value was detected from the client问题处理
问题剖析: 用户在页面上提交表单到服务器时,服务器会检测到一些潜在的输入风险,例如使用富文本编辑器控件(RichTextBox.FreeTextBox.CuteEditor等)编辑的内容中包含有HTM ...
- 判定程序员等级,HashMap就够了
JDK1.8 HashMap源码分析 用到的符号: ^异运算:两个操作数相同,结果是;两个操作数不同,结果是1. &按位与:两个操作数都是1,结果才是1. 一.HashMap概述 在JDK1 ...
- seaborn使用(绘图函数)
seaborn使用(绘图函数) 数据集分布的可视化 分类数据的绘图 线性关系可视化 一.数据集分布的可视化 distplot kdeplot rugplot 1.distplot() 灵活的绘制单变量 ...
- JAVA处理Blob大对象
Blob对象是SQL Blob的Java语言映射.SQL Blob是一个内置类型,它可以将一个二进制大对象保存在数据库中.接口ResultSet.CallableStatement和PreparedS ...
- 整理的Java List Set Map是否有序,元素是否允许重复
整理的Java List Set Map是否有序,元素是否允许重复的说明,如下图:
- 简单将sublime text 配置为lua或c#一键编译运行环境
lua { "cmd": "luajit $file", "selector":"source.lua" } C { & ...
- 深入Java虚拟机(4)——网络移动性
一.软件应用程序发展的几个阶段 软件应用程序发展经历了如下几个阶段: 服务于多个终端用户的大型计算机系统 孤立的个人计算机上运行孤立的软件 客户机/服务器模式 分布式处理模式 内容服务模式(网络移动性 ...