int climbStairs(int n) {
int s;
if(n==1){
return 1;
}else if(n==2){
return 2;
}else{
return s=climbStairs(n-1)+climbStairs(n-2);
}
}
这种问题很容易让人想到递归,但是发现到了n=44的时候,就出现“时间限制到”的问题了,这也是我第一次体会到递归虽然简单,但是所耗费的时间也很长这一常识。
然后换种思路,豁然开朗!
int climbStairs(int n) {
int s;
if(n==1){
return 1;
}
int res[n+1];
res[1]=1;
res[2]=2;
for(int i=3;i<=n;i++){
res[i]=res[i-1]+res[i-2];
}
return res[n];
}
猜想一般递归问题都转化为动态规划问题: