题目描述
- 三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。
Code
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
long solve = solve2(n);
System.out.println(solve);
}
private static long solve(int n) {
if(n==1) return 1;
if(n==2) return 2;
if(n==3) return 4;
return solve(n-1)+solve(n-2)+solve(n-3)%1000000007;
}
private static long solve2(int n) {
if(n==1) return 1;
if(n==2) return 2;
if(n==3) return 4;
int x1=1,x2=2,x3=4;
for (int i = 0; i < n-3; i++) {
int t=x1;
x1=x2;
x2=x3;
x3=(x1+x2+t)%1000000007;
}
return x3;
}