题目描述:
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
思路:回溯法或者数学关系
遇到的问题:回溯法用dfs一步一步算,时间超出限制。只能用数学关系:
对于n阶的方法为n-1阶和n-2阶的方法加在一起。即f(n)=f(n-1)+f(n-2),所以从1,2一直加上去就可以。
public static int climbStairs(int n)
{
if (n==1)return 1;
if (n==2)return 2;
int a=1,b=2;
for (int i = 3; i <= n; i++) {
int temp=a+b;
a=b;
b=temp;
}
return b;
}