leetcode 70. Climbing Stairs

185 阅读1分钟

动态规划

  • 最优子结构:到n层可以由n-2层和n-1层的方法之和得到
  • 边界条件:N<=3的 方法=N
  • 状态转移方程: f(n)=f(n-2)+f(n-1)

直接递归:

function fn(n){
	if(n<=3) return n;
	return fn(n-2)+fn(n-1);
}

这样写会超时

所以需要保存中间值,每次保存两个就可以:

function fn(n){
	if(n<=3) return n;
	let i=4,x=3,y=2,r=0;
	while(i<=n){
		r=x+y;
		y=x;
		x=r;
		i++
	}
	return r;
}