第一种:消耗内存比较大但是最直观的解法
class Solution {
public int waysToStep(int n) {
//最后一步走1阶 2阶 3阶
//dp[i]=dp[i-1]+dp[i-2]+dp[i-3];
if(n==1)return 1;
if(n==2)return 2;
if(n==3)return 4;
long dp[]=new long [n+1];
dp[1]=1;
dp[2]=2;
dp[3]=4;
for(int i=4;i<n+1;i++){
dp[i]=(dp[i-1]+dp[i-2]+dp[i-3])%1000000007;
}
return (int)dp[n];
}
}
滚动变量解决内存问题
//减少内存消耗
class Solution {
public int waysToStep(int n) {
if(n==1)return 1;
if(n==2)return 2;
if(n==3)return 4;
long a=4,b=2,c=1,d=1;
for(int i=4;i<n+1;i++){
d=c;
c=b;
b=a;
a=(b+c+d)%1000000007;
}
return (int)a;
}
}
稍微改动
int a=4,b=2,c=1,d=1;
for(int i=4;i<n+1;i++){
d=c;
c=b;
b=a;
a=(b+(c+d)%1000000007)%1000000007;
}
return a;