设代表爬到第层的方法,因为你一次可以爬层或者层,所以你可以爬到层再爬2层,或者爬到层再爬1层。即
cpp实现:
/*
* @lc app=leetcode.cn id=70 lang=cpp
*
* [70] 爬楼梯
*/
#include<iostream>
#include<vector>
using namespace std;
// @lc code=start
class Solution {
public:
int climbStairs(int n) {
// f(n) = f(n-1)+f(n-2)
if (n==1) return 1; // 防止f[2]溢出
// 开数组
vector<int> f(n+1);
f[1]=1, f[2]=2;
for (int i=3; i<=n; i++){
f[i] = f[i-1]+f[i-2];
}
return f[n];
}
};
// @lc code=end
由于只于和有关,因此只需要3个整型变量即可将空间由优化到
class Solution {
public:
int climbStairs(int n) {
// f(n) = f(n-1)+f(n-2)
// 开数组
if (n==1) return 1;
int pre=1, now=2;
for (int i=3; i<=n; i++){
int next = pre+now;
pre = now;
now = next;
}
return now;
}
};