問題是n階樓梯要爬,每次可以走1步或者2步,問爬到n階,一共有多少種方法。
其實就是整數n拆分成若干個1和2的求和,假設n階有Sn種方法,那麼Sn可能是怎麼來的呢,就是Sn-1再+1,或者Sn-2再+2,所以劃分爲子問題,Sn=Sn-1 + Sn-2.
class Solution {
public:
int climbStairs(int n) {
vector<int> base(n+1,0);
base[0]=1;
base[1]=1;
for(int i=2;i<=n;i++){
base[i]=base[i-1]+base[i-2];
}
return base[n];
}
};