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

2021-10-06 23:28:22 字數 805 閱讀 1437

題目描述:

給定乙個數字,我們按照如下規則把它翻譯為字串:0 翻譯成 「a」 ,1 翻譯成 「b」,……,11 翻譯成 「l」,……,25 翻譯成 「z」。乙個數字可能有多個翻譯。請程式設計實現乙個函式,用來計算乙個數字有多少種不同的翻譯方法。

示例 1:

輸入: 12258

輸出: 5

解釋: 12258有5種不同的翻譯,分別是"bccfi", 「bwfi」, 「bczi」, 「mcfi"和"mzi」

題目分析:和之前的打家劫舍有些相似。由於題目最大數字為25,是乙個兩位數,那麼將數字進行拆分求解組合時「

如果是一位數,沒有任何限制,但是如果是乙個兩位數,就需要判斷是否是乙個合法的數字,合法才能算為乙個方案,不難看出,合法的範圍為[10-25],此外,0x的形式也是不合法的。

我們用dp[i]表示到數字i為止的方案數目,如果i與i-1的組成的兩位數是合法的,方案累加,否則仍舊繼承i-1的方案數

}優化:一維的遞推陣列我們可以使用臨時變數的方法來進行空間優化

class

solution

return a;

}}

更進一步,我們還可以把字串s去掉,直接在num上進行處理,對某個數值要取得特定位數的數字,一般通過

對10的冪做整除與取餘運算

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 乙個數字可能有多個翻譯。請程式設計實現乙個函式,用來計算乙個數字有多少種不同的翻譯方法。class solution vector int nums while num int...

leetcode 面試題45 把陣列排成最小的數

解題思路 這道題的關鍵就在於如何重新定義排序規則,對待排序的字串x和y,如果 x y 構成的字串小於 y x 構成的字串,自然x應當排在y前面,反之亦然 class solution def minnumber self,nums list int str defcmp x,y if x y y x...