额,本来写的是迭代的,结果秒超时,很难绷得住。。
class Solution {
public:
int waysToStep(int n) {
if(n==1)return 1;
if(n==2)return 2;
if(n==3)return 4;
if(n>=4)return (waysToStep(n-1)%1000000007+waysToStep(n-2)%1000000007+waysToStep(n-3)%1000000007)%1000000007;
return 0;
}
};
然后用动态规划思想过了。。
class Solution {
public:
int waysToStep(int n) {
int a[1000000]={0};
a[1]=1;
a[2]=2;
a[3]=4;
if(n>=4){
for(int i=4;i<=n;i++){
a[i]=a[i-3]+a[i-2];
a[i]%=1000000007;
a[i]+=a[i-1];
a[i]%=1000000007;
}
}
return a[n]%1000000007;
}
};
Warnning:
取模运算这一步很离谱。。
这玩意不行:
不能三个一起加。。
for(int i=4;i<=n;i++){
a[i]=(a[i-1]%1000000007+a[i-2]%1000000007+a[i-3]%1000000007)%1000000007;
Line 10: Char 58: runtime error: signed integer overflow: 1681576296 + 960201832 cannot be represented in type ‘int’ (solution.cpp)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior prog_joined.cpp:20:58
噢,应该是int数组的限制,我看其他代码用其他结果就可以三个一起加,比如array!