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 ...
随机推荐
- vmware迁移到openstack的一些坑
title: 安全平台迁移 tags: 新建,模板,小书匠 grammar_cjkRuby: true --- 前言 主要有三个坑: 一是如果原先虚拟机没有安装virtio驱动,要设置设备驱动为ide ...
- Android studio安装和问题
一.Android studio的安装 [提示]A.以下Android studio2.2.2版本.(也有新版本) B.以下是用Android studio自带的sdk ①双击安装文件进行安装 ②如果 ...
- Python中的转义
在Python交互式解释器中,输出的字符串会用引号引起来,特殊字符会用反斜杠(\)转义.如果遇到带有\的字符被当作特殊字符时,有以下两种处理方法:1.使用双反斜杠(\\)来转义2.使用原始字符串,方法 ...
- JQuery写的一个常见的banner
大致的布局如下: <div class="banner" > <div class="pic"> ...
- Linux中MySQL忽略表中字段大小写
linux 下,mysql 的表面默认是区分大小写的,windows 下默认不区分大小写,我们大多数在windows 下开发,之后迁移到linux(特别是带有Hibernate的工程),可以修改配置是 ...
- 用豆瓣镜像解决pip安装慢的问题
pip3 install django==1.9 -i http://pypi.douban.com/simple/
- valgrind检测内存泄漏
Valgrind 使用 用法:valgrind [options] prog-and-args [options]: 常用选项,适用于所有Valgrind工具 -tool=<name>最常 ...
- Android简易实战教程--第三十九话《Chronometer实现倒计时》
Android提供了实现按照秒计时的API,今天就是用这个API实现简单的倒计时. 来个布局: <?xml version="1.0" encoding="utf- ...
- ROS机器人程序设计(原书第2版)补充资料 (玖) 第九章 导航功能包集进阶 navigation
ROS机器人程序设计(原书第2版)补充资料 (玖) 第九章 导航功能包集进阶 navigation 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中 ...
- Thread 方法
Thread类的一些被Thread对象调用的方法: 1 public void start() 使该线程开始执行:Java 虚拟机调用该线程的 run 方法. 2 public void run() ...