Leet Code OJ 70. Climbing Stairs(爬楼梯问题)
来源:互联网 发布:删除mac账号 编辑:程序博客网 时间:2024/06/06 17:58
题目
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?
这是一个爬楼梯问题,给定楼梯层数n,每一步只能走1层或者2层,问上到楼梯顶有多少种方式?
分析
这是一个动态规划的问题:(斐波那契数列问题)
n:方式
1:1
2:2
3:3
…
f(n)=f(n-1)+f(n-2)
解题
我想到有两种方式
第一种是递归,代码很简单,但是这样Leetcode会超时
public int climbStairs(int n) { if(n <= 2) return n; return climbStairs(n-1) + climbStairs(n-2); }
第二种是非递归:
上面递归的方式会导致有很多重复子问题,例如当n=4的时候,此时需要求n=3和n=2的情况,然后求n=3,又需要求n=1 和 n=2的情况,此时已经求了两个n=2的情况了。所以这就是重复的关键点,也是耗时的关键点
因此用动态规划的思想,自底向上求解:
public int climbStairs(int n) { if(n <= 2) return n; int[] step = new int[n+1]; step[1] = 1; step[2] = 2; for(int i = 3; i <= n; i++){ step[i] = step[i-1] + step[i-2]; } return step[n]; }
0 0
- Leet Code OJ 70. Climbing Stairs(爬楼梯问题)
- LeetCode OJ-70. Climbing Stairs(爬楼梯问题)
- Leet Code OJ 70. Climbing Stairs [Difficulty: Easy]
- [leet code] Climbing Stairs
- LeetCode-Climbing Stairs(爬楼梯问题)
- LeetCode-Climbing Stairs(爬楼梯问题)
- LeetCode 70. Climbing Stairs(爬楼梯)
- 70. Climbing Stairs (爬楼梯)
- LeetCode OJ 之 Climbing Stairs ( 爬楼梯 )
- Climbing Stairs(爬楼梯)
- 爬楼梯的问题Climbing Stairs
- [LeetCode] Climbing stairs 爬楼梯问题
- LeetCode | Climbing Stairs(爬楼梯)
- 爬楼梯(LintCode Climbing Stairs)
- Climbing Stairs 爬楼梯 @LeetCode
- Leetcode Climbing Stairs 爬楼梯
- LintCode Climbing Stairs 爬楼梯
- LeetCode--Climbing Stairs(爬楼梯)
- 干货:实现数据可视化的几个工具选择(工具+编程语言)
- 网页正文提取方案
- 学习JavaScript必知的一些基础知识
- Spark+Hadoop+Mahout大数据系列
- 深度学习:Pre-Training的理解
- Leet Code OJ 70. Climbing Stairs(爬楼梯问题)
- 终极的代码混淆脚本,解决所有因代码混淆无法打签名包的问题
- 开发一个程序基本思路
- 机器学习实战-kNN
- spring AOP简单理解
- 数据库的原理
- 类找不到总结java.lang.ClassNotFoundException
- Linux下高并发socket最大连接数所受的各种限制
- PLSQL Show Ojbect Dependence