劍指offer 學習筆記 把數字翻譯成字串

2021-10-04 05:20:59 字數 959 閱讀 5570

面試題46:把數字翻譯成字串。給定乙個數字,我們按照如下規則把它翻譯為字串:0翻譯成「a」,1翻譯成「b」,…,25翻譯成「z」。乙個數字可能有多個翻譯,如,12258有5種不同翻譯,分別是「bccfi」、「bwfi」、「bczi」、「mcfi」和「mzi」,程式設計實現乙個函式,計算乙個數字有多少種不同的翻譯方法。

我們以12258為例分析,我們有兩種選擇來翻譯第一位數字1,第一種是翻譯為「b」,剩下2258,第二種是1和後面的2一起翻譯為「m」,剩下258。當最開始的乙個或兩個數字被翻譯成乙個字元後,我們接著翻譯後面剩下的數字,我們可以用乙個遞迴來完成計算。

定義函式f(i)為從第i位數字開始的不同的翻譯數目,那麼f(i)=f(i+1)+g(i,i+1)xf(i+2),當第i位和第i+1位拼接起來的數字在10~25的範圍內時,函式g(i,i+1)的值為1,否則為0。

儘管遞迴可以解決這個問題,但由於存在重複的子問題,最好的方法是從小問題開始自底向上解決問題:

#include

#include

using

namespace std;

intgettranslationcount

(const string& numstring)

else

else}}

counts[i]

= count;

} count = counts[0]

;delete

counts;

return count;

}int

gettranslationcount

(int num)

string numstring =

to_string

(num)

;return

gettranslationcount

(numstring);}

intmain()

劍指offer學習筆記

筆記主要記錄方法和知識點 知識點1 負數與補碼 乙個參考 知識點2 移位操作 右移 變小 按位 操作 知識點3 0xffffffff表示32位 1 o logn 的方法 非遞迴的快速冪,用到二進位制表示。在迴圈內注意base base。兩個指標等間距一起走。想明白斷開鍊錶這個事情,相當於操作是在原有...

劍指offer學習筆記2

void matrix vector num,int x1,int y1,int x2,int y2 if x1 x2 if x1 x2 y1 y2 if x2 x1 1 y1 y2 x1 y1 x2 y2 template class stackwithmin else void pop t to...

劍指offer 學習筆記 樹

樹的寬度 廣度 優先遍歷 先訪問樹的第一層節點,再訪問第二層節點,直到最後一層。同一層節點中,從左到右依次訪問。二叉搜尋樹中,左子節點總是小於等於根節點,右子節點總是大於等於根節點。我們可以平均在o logn 的時間內根據節點值在二叉搜尋樹中找到乙個節點。二叉樹的特例有堆和紅黑樹。堆分最大堆和最小堆...