1. 程式人生 > >劍指offer-斐波那契現實版以及升級玩法

劍指offer-斐波那契現實版以及升級玩法

題目描述

一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法

解法:

1、規律法,可以羅列出各個階級對應的跳法,然後總結規律

2、使用動態思想,視作一個遞迴,每一次走一步或者兩步之後兩個支路進行解法(全域性縮放到區域性)

遞迴程式碼是如此簡單:

    int jumpFloor(int number) {
        if(number<=1)
            return 1;
        return jumpFloor(number-1)+jumpFloor(number-2);
}
升級版本:

一隻青蛙一次可以跳上1級臺階,也可以跳上2級……它也可以跳上

n級。求該青蛙跳上一個n級的臺階總共有多少種跳法。

思路:使用動態思想最好,量n臺階抽象成有兩塊n-1,和n兩塊臺階,跳法就是2,再將n-1繼續切分...抽象的思維

程式碼:

    int jumpFloorII(int number) {

        if(number<=1)

            return 1;

        return 2*jumpFloorII(number-1);

    }

斐波那契數列接著玩:

題目描述

我們可以用2*1的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個2*1的小矩形無重疊地覆蓋一個2*n的大矩形,總共有多少種方法?
解題:這種題目一開始如果不熟悉的話是很難想到是斐波那契,但是通過列出遞推,我們可以總結出數列的遞推式子,最後發現還是斐波那契,只是邊界條件不一樣而已。

或許你也可以這樣思考,使用萬能的動態規劃,將n個小矩形分為n-1和1,n-2和2就有兩種方式。到這裡有木有發現像斐波那契了,也就是說n個小矩形可能方式由n-1和n-2兩種方式之和!!!題破!

因此程式碼就很自費,下面免費送上:

    int rectCover(int number) {
        if(number<1)//一定要做安全性的檢測
            return 0;
        if(number==1)
            return 1;
        if(number==2)
            return 2;
        return rectCover(number-1)+rectCover(number-2);
    }

相關推薦

offer-現實以及升級

題目描述一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法解法:1、規律法,可以羅列出各個階級對應的跳法,然後總結規律2、使用動態思想,視作一個遞迴,每一次走一步或者兩步之後兩個支路進行解法(全域性縮放到區域性)遞迴程式碼是如此簡單:

offer[數列]

劍指offer[斐波那契數列] 題目描述 思路 程式碼 細節知識 題目描述 大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。 n<=39

offer-數列

2. 斐波那契數列 時間限制:1秒 空間限制:32768K 熱度指數:410368 題目描述 大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。 n

offer:數列

題目描述 大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。 n<=39 思路:根據斐波那契數列的定義 斐波那契數列(Fibonacci sequence),又稱黃金分割數列、因數學家列昂納多·斐波那契(Leo

offer--數列

題目描述 大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。 n<=39 程式碼實現(Java) public class Solution { public int Fibonacci(int n) {

offer--數列-跳臺階-變態跳臺階-矩形覆蓋

題目描述 大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。 n<=39 注: 自己最早是直接用一整個數列,將每一步的資料都儲存了下來,但是這是不必要的。因為只需要用到前兩步的資料,所以只需要用兩個變數將前兩步的資料儲存下來即可。

offer - 數列 - C++

https://www.nowcoder.com/profile/4388697/codeBooks?problemId=3694 時間複雜度:n 空間複雜度: 1 class Solution { public: int Fibonacci(int n) { int

(Python實現)offer---數列

(Python實現)劍指offer—斐波那契數列 題目描述:大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。n<=39 這個題目也不難,第

offer____數列

大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。 class Solution { public: int Fibonacci(int n) { /* if(n <= 0) return 0; if

offer-菲切數列

一、問題描述 實現斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項。n<=39 二、思路 迴圈實現即可。 三、程式碼 class Solution { public:

offer-矩形覆蓋-數列(遞歸,遞推)

思考 -1 com light logs src images 數列 斐波那契數 class Solution { public: int rectCover(int number) { if(number==0 || num

offer 07數列

賦值 out data- rtti turn 現在 long 運行時 簡單 現在要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。n<=39 java版本: public class Solution { public static

offer(7)數列

sub write return 16px color 現在 UNC 輸入一個整數 得到 題目描述: 大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。n<=39 解題代碼: function Fibonacc

7.數列-offer-Python2.7

劍指offer第7題 牛客網線上程式設計連結 https://www.nowcoder.com/activity/oj 斐波那契數列 題目描述 要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。n<=39 思路1:遞迴 當n = 0時,Fibonac

Offer】04數列

題目描述 大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0)。 n<=39 時間限制:1秒;空間限制:32768K 解題思路 首先看到題目的第一想法就是遞迴,程式碼如下: # -*- coding:utf-8 -*- c

offer——(3)數列&&跳臺階&&瘋狂跳臺階進階&&矩形覆蓋

 這兩道題 其實相同。 public class Solution { /* 一看到題目就想到用遞迴,結果雖然能通過,但時間還是太長 */ public int Fibonacci(int target) { return hhh(ta

offer Python - 數列

題目描述 大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項。 n<=39 方法1: 迴圈。 # -*- coding:utf-8 -*- class Solution: def Fibonacci(self,

offer數列非遞迴求解第N項

public class Solution {    public int Fibonacci(int n) {       //錯誤輸入處理       if

offer數列非遞歸求解第N項

非遞歸 acc 斐波那契 錯誤 bsp fibonacci 更新 off for public class Solution { public int Fibonacci(int n) { //錯誤輸入處理 if(n<0) return

Offer - 7:數列

題目描述 大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項(從0開始,第0項為0,n <= 39) 題目連結:https://www.nowcoder.com/practice/c6c7742f5ba7442aada113136ddea