演算法題 把數字翻譯成字串

2021-10-02 20:29:24 字數 868 閱讀 2155

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

思路:我們以12258為例分析如何從數字的第一位開始一步步計算不同翻譯方法的數目。我們有兩種不同的選擇來翻譯第一位數字1.第一種選擇是數字1單獨翻譯成「b」,後面剩下數字2258;第二種選擇是1和緊挨著的2一起翻譯成「m」,後面剩下數字258。我們可以用遞迴的思路來完成題目。

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

遞迴從最大的問題開始自上而下解決問題。我們也可以從最小的子問題開始自下而上解決問題,這樣就可以消除重複的子問題。我們從數字的末尾開始,然後從右到左翻譯並計算不同翻譯的數目

接下來我們用c++進行程式設計:

int

gettranslationcount

(int number)

intgettranslationcount

(const string& number)

} counts[i]

= count;

} count = counts[0]

;delete

counts;

return count;

}

演算法 把數字翻譯成字串

題目要求 給定乙個數字,按照如下規則翻譯成字串 0翻譯成 a 1翻譯成 b 25翻譯成 z 乙個數字有多種翻譯可能,例如12258一共有5種,分別是bccfi,bwfi,bczi,mcfi,mzi。實現乙個函式,用來計算乙個數字有多少種不同的翻譯方法。參考至該作者 自上而下,從最大的問題開始,遞迴 ...

把數字翻譯成字串

給定乙個數字,我們按照如下規則把它翻譯為字串 0翻譯成 a 1翻譯成 b 11翻譯成 l 25翻譯成 z 乙個數字可能有多個翻譯。例如12258有5種不同的翻譯,它們分別 bccfi bwfi bczi mcfi 和 mzi 請程式設計實現乙個函式用來計算乙個數字有多少種不同的翻譯方法 1.dfs ...

把數字翻譯成字串

給定乙個數字,我們按照如下的規則將它翻譯成字串 0翻譯成 a 1翻譯成 b 11翻譯成 l 25翻譯成 z 乙個數字可能有多種翻譯,例如,12258有5種翻譯,分別是 bccfi bwfi bczi mcfi 和 mzi 請程式設計實現乙個函式,用來計算乙個數字有多少種不同的翻譯方法。這道題,乍一看...