Climbing Stairs
2015-08-13 10:42
453 查看
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层楼梯的方法总数s(n),可以根据是否会踏上第n-1层楼梯从而分成两类方法:第一种是先上n-1层,最后再上1层,对应s(n-1)*1种方法;第二种是先上n-2层,最后直接上2层,对应s(n-2)*1种方法。故最后s(n)=s(n-1)+s(n-2)。
另外此题不能用简单的递归函数计算,因为leetcode会报超时。所以采用DP,即保存子问题计算结果的思想,避免冗余计算。
Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top?
这题实际上和费波那契数列很像。上n层楼梯的方法总数s(n),可以根据是否会踏上第n-1层楼梯从而分成两类方法:第一种是先上n-1层,最后再上1层,对应s(n-1)*1种方法;第二种是先上n-2层,最后直接上2层,对应s(n-2)*1种方法。故最后s(n)=s(n-1)+s(n-2)。
另外此题不能用简单的递归函数计算,因为leetcode会报超时。所以采用DP,即保存子问题计算结果的思想,避免冗余计算。
int climbStairs(int n) { int a[1000] = { 0,1,2 }; int i = 3; if(n == 1) return a[1]; if(n == 2) return a[2]; else{ while(i <= n){ a[i] = a[i - 1] + a[i - 2]; i++; } return a ; } }
相关文章推荐
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言内存对齐实例详解
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- 探讨C语言的那些小秘密之断言
- C语言实现BMP转换JPG的方法
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置
- C语言查找数组里数字重复次数的方法
- C语言泛型编程实例教程
- C语言中使用lex统计文本文件字符数
- C语言进制转换代码分享
- 基于C语言fflush()函数的使用详解
- C语言单链队列的表示与实现实例详解
- 关于C语言除0引发的思考
- 深入分析C中不安全的sprintf与strcpy
- Lua教程(四):在Lua中调用C语言、C++的函数
- C语言求幂计算的高效解法