[leetcode] #70 Climbing Stairs
来源:互联网 发布:linux强制删除目录 编辑:程序博客网 时间:2024/05/20 06:23
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级台阶,每次可以爬2级或者1级,问总共有几种爬法。
刚开始以为是很简单的排列组合计算,于是直接码出了v1:
int climbStairs(int n) { int NumOfTwo=0; int NumOfOne=0; int NumOfWay=0; int Sum; int Pro; for (NumOfTwo=0;NumOfTwo<=n/2;NumOfTwo++) { Pro=1; NumOfOne=n-NumOfTwo*2; Sum=NumOfOne+NumOfTwo; for (int i=Sum;i>NumOfTwo;i--) Pro*=i; for (int j=1;j<=NumOfOne;j++) Pro/=j; NumOfWay+=Pro; } return NumOfWay;}
跑出了果然出错了,原因是溢出,阶乘嘛,大家都懂的。
于是想把乘法和除法同时做(这时乘法得从大做,除法从小做,不然两个int没法约,直接变1),还暴力的上了long long int来存储,倒是leetcode上的测试过了,但是问题还是没解决,仍然很容易出现溢出。
int climbStairs(int n) { int NumOfTwo=0; int NumOfOne=0; int NumOfWay=0; int Sum; long long int Pro=1; for (NumOfTwo=0;NumOfTwo<=n/2;NumOfTwo++) { Pro=1; NumOfOne=n-NumOfTwo*2; Sum=NumOfOne+NumOfTwo; for (int i=Sum,j=1;i>NumOfTwo&&j<=NumOfOne;i--,j++) { Pro*=i; Pro/=j; } NumOfWay+=Pro; } return NumOfWay;}
速度倒是不满,1ms出,但作为一个为当程序员而刷leetcode的人,总是觉得这种鲁棒性(这里又想起了张灏老师:“人家原先叫稳健性,多好听的名字,不知道被谁叫成了鲁棒性”。)差的程序很不舒服。仔细考虑了一下,还可以用动态规划来做:站在每一级台阶上,它能到达的路线数等于它的前两级台阶的到达路线数的总和(也就是斐波那契数列)。然后就有了下面的码:
int climbStairs(int n) { int one=1,two=1; int temp; for (int i=1;i<n;i++) { temp=two; two+=one; one=temp; } return two;}
0 0
- LeetCode(70)Climbing Stairs
- leetcode 70-Climbing Stairs
- [leetcode 70] Climbing Stairs
- leetcode || 70、 Climbing Stairs
- [leetcode] #70 Climbing Stairs
- LeetCode 70 Climbing Stairs
- leetcode 70 Climbing Stairs
- LeetCode---(70)Climbing Stairs
- leetcode#70 Climbing Stairs
- Leetcode[70]-Climbing Stairs
- leetcode[70]:Climbing Stairs
- Leetcode 70 Climbing Stairs
- leetcode 70:Climbing Stairs
- Leetcode #70 Climbing Stairs
- [leetcode 70]Climbing Stairs
- leetcode 70: Climbing Stairs
- leetCode #70 Climbing Stairs
- Leetcode#70||Climbing Stairs
- Search Insert Position 寻找插入的位置
- 安装Xcode 6.3报“This item is temporarily unavailable”错误的解决方法
- 历届试题 危险系数 (求割点DFS)
- 怎么在Struts2.0 (action)中响应Ajax(jQuery)请求?
- Palindrome Number —— Leetcode(再做一遍)
- [leetcode] #70 Climbing Stairs
- Combination Sum 全排列求和
- MySQL中找出数据库中表名以cf_打头的所有表的方法
- Combination Sum II 全排列求和无重复
- java自学笔记————IO流中的键盘输入流和输出流详解;
- [LeetCode] Number of Islands
- nyoj 104 最大和 【压缩矩阵 DP求最大连续子序列的和】
- UVA 11090 - Going in Cycle!!(最短路`Bellman-Ford)
- 非常有用的android控件编程