Java 面試題46 把數字翻譯成字串

2021-09-14 03:02:10 字數 1023 閱讀 1588

給定乙個數字,按照如下規則翻譯成字串:0翻譯成「a」,1翻譯成「b」…25翻譯成「z」。乙個數字有多種翻譯可能,例如12258一共有5種,分別是bccfi,bwfi,bczi,mcfi,mzi。實現乙個函式,用來計算乙個數字有多少種不同的翻譯方法。

分析思路:

用遞迴自頂向下分析,用動態規劃自低向上求解

•定義問題:當最開始的乙個或者兩個數字被翻譯成乙個字元後,我們接著翻譯後面剩下的數字;

•用乙個遞迴式來表示:定義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。

•該問題使用上面的遞迴方法會存在很多重複子問題。以12258為例,翻譯12258可以分解為兩個子問題:翻譯1和2258,以及翻譯12和258。接下來我們翻譯第乙個問題中剩下的2258,同樣也可以分解成兩個子問題,翻譯2和258,以及翻譯22和58.注意到子問題翻譯258重複出現了。

所以我們使用動態規劃的方法,自低向上求解問題,消除重複子問題。

package jianzhioffer;

/* * 面試題46:把數字翻譯成字串

* 題目:給定乙個數字,我們按照如下規則把它翻譯成字串:0翻譯成a,1翻譯成b,。。。,

* 11翻譯成l,。。。,25翻譯成z。乙個數字可能有多個翻譯。例如,12258有5種不同的翻譯,

* 分別是bccfi,bwfi,bczi,mufi,mzi。請程式設計實現乙個函式,用來計算乙個數字有多少種

* 不同的翻譯方法。

*/public

class

demo46

system.out.

println

(f[1])

;}public

static

intg

(string str,

int i)

}

leetcode 面試題46把數字翻譯成字串

解題思路 動態規劃,1 得到num的每一位數字,從低位到高位用nums儲存 2 從低位到高位依次求解,狀態轉移方程如下 d p i dp i 1 dp i 2 10 leq nums i 10 nums i 1 26 dp i 1 others end right.dp i dp i 1 dp i ...

leetcode面試題46把數字翻譯成字串

題目描述 給定乙個數字,我們按照如下規則把它翻譯為字串 0 翻譯成 a 1 翻譯成 b 11 翻譯成 l 25 翻譯成 z 乙個數字可能有多個翻譯。請程式設計實現乙個函式,用來計算乙個數字有多少種不同的翻譯方法。示例 1 輸入 12258 輸出 5 解釋 12258有5種不同的翻譯,分別是 bccf...

leetcode 面試題46 把數字翻譯成字串

題目鏈結 給定乙個數字,我們按照如下規則把它翻譯為字串 0 翻譯成 a 1 翻譯成 b 11 翻譯成 l 25 翻譯成 z 乙個數字可能有多個翻譯。請程式設計實現乙個函式,用來計算乙個數字有多少種不同的翻譯方法。class solution vector int nums while num int...