LeetCode 70 Climbing Stairs
2017-08-02 14:27
429 查看
题目:
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;
}
};
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;
}
};
相关文章推荐
- 【Leetcode-Easy-70】Climbing Stairs
- 【leetcode】【70】Climbing Stairs
- Leetcode 70 Climbing Stairs
- LeetCode 70: Climbing Stairs
- (java)leetcode-70:Climbing Stairs
- LeetCode(70) Climbing Stairs
- LeetCode70 Climbing Stairs
- LeetCode 70 Climbing Stairs
- LeetCode-70 Climbing Stairs(斐波那契数列)
- 【LeetCode】C# 70、Climbing Stairs
- LeetCode70——Climbing Stairs
- [leetcode 70] Climbing Stairs
- LeetCode 70 Climbing Stairs(Python详解及实现)
- 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