LeetCode 70 Climbing Stairs
来源:互联网 发布:域名实名审核通过时间 编辑:程序博客网 时间:2024/05/17 22:36
题目:
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?
Note: Given n will be a positive integer.
题目链接题意:
设计一个爬楼梯的情景,假如爬到顶楼需要n步,每次你可以选择踏出一步或两步,问,爬到顶楼的方式有多少种?
已知所给的n一定是一个正整数。
设一次迈两步的次数有 i 次,则一共迈了 n - i 次,在这个数量下,可能的情况是一个组合数C(i, n-i)。i 的范围是 [0, n/2],因为假如一个一个算效率太慢,不能考虑,又因为每两个相邻的组合数之间通过数学推导可以得出一个关系:
C(i-1, j+1) = C(i, j) * (j+1) * i / ((j - i + 1)*(j - i + 2))通过观察可得:
当n为偶数时,C(n/2, n - n/2) = 1。
当n为奇书时,C(n/2, n - n/2) = n - n/2
所以由i = n/2,依次递减即可。
代码如下:
class Solution {public: int climbStairs(int n) { long long Cn = n%2 ? n-n/2 : 1; int ans = Cn; for (int i = n/2, j = n-i; i > 0; i --, j++) { Cn = Cn * i * (j + 1) / ((j-i+1) * (j-i+2)); ans += Cn; } return ans; }};
阅读全文
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
- 把OpenCV Mat当一个普通数组来用
- Event事件处理机制的实例应用
- iOS 如何移除Main.storyboard
- 第五章 基于TCP的服务器端/客户端(2)
- 给Java程序猿们推荐一些值得一看的好书
- LeetCode 70 Climbing Stairs
- 欢迎使用CSDN-markdown编辑器
- 如何在AWS上面安装openvpn as
- MQTT-SN协议阅读之MQTT-SN vs MQTT
- 跨平台二维绘图程序(四)——多边形绘制
- 磁盘管理(1)
- crond中使用flock命令的坑 信海龙
- 阿里云配置遇到的一个问题
- 电商类app商品详情参数选择联动的实现