LeetCode/solutions/70. Climbing Stairs.md
2019-09-13 23:08:41 +08:00

39 lines
1.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# [70. Climbing Stairs](https://leetcode.com/problems/climbing-stairs/description/)
# 思路
简单的动态规划。
按照最后是跨一步还是两步可以将到达第n步的所有情况分为两种
* 1、从第n-2步阶梯一下跨两步到第n步阶梯
* 2、从第n-1步阶梯跨一步到第n步阶梯
即若dp[i]代表跨到第i步阶梯的情况数那么`dp[i] = dp[i - 1] + dp[i - 2]`。
时间复杂度和空间复杂度都为O(n)可将空间复杂度优化为O(1)
# C++
``` C++
class Solution {
public:
int climbStairs(int n) {
vector<int>dp(n + 1);
dp[0] = 1;
dp[1] = 1;
for(int i = 2; i <= n;i++){
dp[i] = dp[i - 1] + dp[i - 2];
}
return dp[n];
}
};
```
空间优化后的版本:
``` C++
class Solution {
public:
int climbStairs(int n) {
int tmp, pre = 1, res = 1;
for(int i = 2; i <= n;i++){
tmp = res;
res += pre;
pre = tmp;
}
return res;
}
};
```