程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Leetcode:climbing_stairs

Leetcode:climbing_stairs

編輯:C++入門知識

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);
    }
}; 


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved