解法:动态规划
如何想到该解法,参考评论区图解,个人觉得很好理解。
得到最终的递推公式
f
(
n
)
=
f
(
n
−
1
)
+
f
(
n
−
2
)
f(n)=f(n-1)+f(n-2)
f(n)=f(n−1)+f(n−2)
这不就是斐波那契数列公式吗?
迭代解法如下:
int numWays(int n){
if(n==0 || n==1) return 1;
int a = 1, b = 1;
for(int i = 2; i<=n; i++)
{
b = a + b;
a = b - a;
b = b % 1000000007;
}
return b;
}
时间复杂度 O ( n ) O(n) O(n),空间复杂度 O ( 1 ) O(1) O(1)。