劍指Offer66題之每日6題 第二天

2021-10-04 00:05:13 字數 2828 閱讀 1397

大家都知道斐波那契數列,現在要求輸入乙個整數n,請你輸出斐波那契數列的第n項。

n<=39。

斐波拉契數列的定義:

用f1, f2分別表示 fi−2, fi−1,用ret表示fifi,每次令ret = f1 + f2,sum就表示fi得到fn,然後把f1, f2分別更新為fi−1, fi, 依次類推,sum的值就是最終fn的值。

int型整數只能儲存f0→f46,下面是這個區間的斐波拉契數列的值:

0: 0

1: 1

2: 1

3: 2

4: 3

5: 5

6: 8

7: 13

8: 21

9: 34

10: 55

11: 89

12: 144

13: 233

14: 377

15: 610

16: 987

17: 1597

18: 2584

19: 4181

20: 6765

21: 10946

22: 17711

23: 28657

24: 46368

25: 75025

26: 121393

27: 196418

28: 317811

29: 514229

30: 832040

31: 1346269

32: 2178309

33: 3524578

34: 5702887

35: 9227465

36: 14930352

37: 24157817

38: 39088169

39: 63245986

40: 102334155

41: 165580141

42: 267914296

43: 433494437

44: 701408733

45: 1134903170

46: 1836311903

class

solution

return ans;}}

;

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

最簡單的動態規劃,考慮最後跳上第n階台階,有兩種方式往上跳:

那麼f(i)表示該青蛙跳上乙個i級的台階總共跳法。故

f(i)=f(i−1)+f(i−2),f(0)=f(1)=1,這就是變形版的斐波拉契數列啊,直接求解。

class

solution

return res;}}

;

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

這裡是引用

class

solution

};

class

solution

};

學習:

pow (x, y)xy次方,返回double型別

我們可以用21的小矩形橫著或者豎著去覆蓋更大的矩形。請問用n個21的小矩形無重疊地覆蓋乙個2*n的大矩形,總共有多少種方法?

這裡是引用

class

solution

return res;}}

;

輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。

這題有很多做法,我選乙個時間複雜度與該整數二進位制**中1的個數正相關的演算法來講;

首先,你必須知道如何消除二進位制中最後乙個位1,利用n &= (n - 1)就可以做到。然後看一下消了幾次n變成0,次數就是答案。

n &= (n - 1)具體的操作是把最後一位1變成0,後面的0變成1,與運算一下,最後一位1就消掉了。

class

solution

return count;}}

;

要注意,這題是不能用移位來求1的個數的,因為負數用補碼表示,而移位是算術移位,如果是負數移位後會在最高位補1,那麼就不能正確統計個數,而且程式會死迴圈,解決方法是把負數強制轉換為unsigned int,然後在執行移位,可以得到正確答案。

class

solution

return count;}}

;

給定乙個double型別的浮點數base和int型別的整數exponent。求base的exponent次方。

這裡是引用

class

solution

};

劍指Offer66題之每日6題 第一天

在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。暴力法遍歷 根據加粗處資訊,從左下或者右上開始比較 時間複雜度 o 2n class solution return false 利用...

劍指Offer66題之每日6題 第七天

統計乙個數字在排序陣列 現的次數。1 遍歷,時間複雜度o n class solution return count 輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點 含根 葉結點 形成樹的一條路徑,最長路徑的長度為樹的深度。struct treenode class solution ...

劍指offer 66題 part1(1 6題)

在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數 這個題其實很簡單 左上角是最小的,右下角是最大的,如果我們從最大或者最小的地方開始查詢不是很方便,想一想是不是,因為有時候選擇是不確定...