码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode:climbing_stairs

时间:2014-10-06 23:25:21      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:迭代   递归   leetcode   

一、     题目

   爬楼梯,一共有n阶,每次可以跨1阶或2阶,则爬到顶部一共有多少种爬法?

二、     分析

   设f(n)表示爬n阶楼梯的不同种方法数,为了爬到第n阶处,有两种选择:

  1.     从n-1阶前进一步

  2.     从n-2阶前进两步

因此有,f(n)=f(n-1)+f(n-2)     这不就是斐波那契数列吗?

故有,

   方法1:迭代

   方法2:递归

   方法3:公式法    F(n)=(1/√5)*{[(1+√5)/2]^n -[(1-√5)/2]^n}


class Solution {
public:
    int climbStairs(int n) {
        int flag;
    	int stair0=1;
    	int stair1=1;
    	if(n<=0)
        	return 0;
        if(n==1)
        	return 1;	
        for(int i=2;i<=n;i++) {
        	flag=stair1;
        	stair1=stair0+stair1;
        	stair0=flag;
        }
        return stair1;
    }
};

公式法:
class Solution {
public:
    int climbStairs(int n) {
        double flag=sqrt(5);
        return floor((pow((1+flag)/2,n+1)+pow((1-flag)/2,n+1))/flag+0.5);
    }
}; 


   

Leetcode:climbing_stairs

标签:迭代   递归   leetcode   

原文地址:http://blog.csdn.net/zzucsliang/article/details/39831321

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!