首页 > 其他 > 详细

leetcode第70题-Climbing Stairsd

时间:2015-04-21 22:47:18      阅读:309      评论:0      收藏:0      [点我收藏+]

  题目的意思是有n个台阶,每次只能上1或2个台阶,求出总共有几种上台阶的方法。

分析:因为每次都只能+1或+2,最后的每一个n就是由1或2的组合组成。但是换一种思路, 我们对比一些斐波那契数列,1、2、3、5、8、、、、,即f(n)=f(n-1)+f(n-2)。如果第一步走了1个台阶,剩下的组合是f(n-1),如果第一步走2个台阶,则剩下的组合f(n-2),从而得到递推式f(n)=f(n-1)+f(n-2),所以,这个爬楼梯就是一个递归的斐波那契数列问题。 

剩下的问题就是如何求出斐波那契数列的问题了,一开始我使用了递归,结果超时,只能用一个数组模拟数列了。整个实现的代码如下:

#include<stdio.h>
#include<stdlib.h>

int climbStairs(int n)
{
	int a[1000];
	a[1]=1,a[2]=2;
	for(int i=3;i<1000;i++)
		a[i]=a[i-1]+a[i-2];
	return a[n];
}

int main()
{
	int n;
	while(scanf("%d",&n)!=EOF)
	{
		int len=climbStairs(n);
		printf("%d\n",len);
	}
	return 0;
}


leetcode第70题-Climbing Stairsd

原文:http://blog.csdn.net/zyh920521/article/details/45174583

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!