題目:
給定乙個數字,按照如下規則翻譯成字串:0翻譯成「a」,1翻譯成「b」…25翻譯成「z」。乙個數字有多種翻譯可能,例如12258一共有5種,分別是bccfi,bwfi,bczi,mcfi,mzi。實現乙個函式,用來計算乙個數字有多少種不同的翻譯方法。
思路:
動態規劃,dp[i]表示從個位到第i位,一共有多少種表達方式,以12345為例,當第i位和i+1位的值大於25時,比如34,因為3和4不能用乙個字母表示所以345表示方式數與45的表示數一樣;如果小於25,則dp[i]=dp[i+1]+dp[i+2]
,也與i+2位有關,比如1這一位,可以有1+2345的表示數和12+345的表示數的和。
**:
private
static
intnum
(int number)
int[
] dp=
newint
[len]
; dp[len-1]
=1;if
((int)arr[len-2]
-48+(
int)arr[len-1]
-48<=25)
else
for(
int i = len-
3; i >=
0; i--
)else
}return dp[0]
;}
《劍指offer》面試題46 把數字翻譯成字串
思路 下面我們從自上而下和自下而上兩種角度分析這道題目,以12258為例 自上而下,從最大的問題開始,遞迴 12258 b 2258 m 258 bc 258 bw 58 mc 58 mz 8 bcc 58 bcz 8 bwf 8 mcf 8 mzi bccf 8 bczi bwfi mcfi bc...
劍指 面試題46 把數字翻譯成字串
題目給定乙個數字,我們按照如下規則把它翻譯為字串 0 翻譯成 a 1 翻譯成 b 11 翻譯成 l 25 翻譯成 z 乙個數字可能有多個翻譯。請程式設計實現乙個函式,用來計算乙個數字有多少種不同的翻譯方法。0 n um 231 0 num 2 0 n um 23 1思路 動態規劃 1 25以內的數字...
劍指offer 面試題46 求1 2 n
題目 求1 2 n,要求不能使用乘除法 for while if else switch case等關鍵字及條件判斷語句 a?b c 方法一 利用建構函式求解。程式不讓使用迴圈,但是我們可以以另一種方式實現迴圈,譬如利用建構函式,不斷的呼叫建構函式,函式的執行語句放在建構函式內部,當我們建立n個類的...