设为首页 加入收藏

TOP

Leetcode:climbing_stairs
2015-07-20 17:32:26 来源: 作者: 【 】 浏览:2
Tags:Leetcode:climbing_stairs

一、 题目

爬楼梯,一共有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);
    }
}; 


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDOJ 3473 Minimum Sum 下一篇Effective C++ 7

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·在 Redis 中如何查看 (2025-12-26 03:19:03)
·Redis在实际应用中, (2025-12-26 03:19:01)
·Redis配置中`require (2025-12-26 03:18:58)
·Asus Armoury Crate (2025-12-26 02:52:33)
·WindowsFX (LinuxFX) (2025-12-26 02:52:30)