[剑指offer][JAVA]面试题第[46]题[把数字翻译成字符串][递归][逆推]
生活随笔
收集整理的這篇文章主要介紹了
[剑指offer][JAVA]面试题第[46]题[把数字翻译成字符串][递归][逆推]
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【問題描述】[中等]
給定一個數字,我們按照如下規則把它翻譯為字符串:0 翻譯成 “a” ,1 翻譯成 “b”,……,11 翻譯成 “l”,……,25 翻譯成 “z”。一個數字可能有多個翻譯。請編程實現一個函數,用來計算一個數字有多少種不同的翻譯方法。示例 1:輸入: 12258 輸出: 5 解釋: 12258有5種不同的翻譯,分別是"bccfi", "bwfi", "bczi", "mcfi"和"mzi"提示:0 <= num < 231【解答思路】
1. 動態規劃
1.1 字符串遍歷
時間復雜度:O(N) 空間復雜度:O(N)
1.2 數字求余(壓縮空間)
時間復雜度:O(N) 空間復雜度:O(1)
2. 逆推遞歸
遞歸出口是num是只有一位數,以xyzcba為例,先取最后兩位(個位和十位)即ba,如果ba>=26,必然不能分解成f(xyzcb)+f(xyzc),此時只能分解成f(xyzcb);但還有一種情況,就是ba<=9,也就是該數十位上為0,此時也不能分解。代碼如下:
時間復雜度:O(N^2) 空間復雜度:O(1)
class Solution {public int translateNum(int num) {if (num<=9) {return 1;}//xyzcbaint ba = num%100;if (ba<=9||ba>=26) {return translateNum(num/10);}else {return translateNum(num/10)+translateNum(num/100);}} }#### 【總結】 ###### 1.從前往后 從后往前 由結果逆推 ###### 2.細節 2.1 整形轉字符串 String s = String.valueOf(num); 2.2整形轉字符數組 char[] sc = String.valueOf(num).toCharArray(); ###### 3. 動態規劃流程 第 1 步:設計狀態 第 2 步:狀態轉移方程 第 3 步:考慮初始化 第 4 步:考慮輸出 第 5 步:考慮是否可以狀態壓縮轉載鏈接:https://leetcode-cn.com/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof/solution/mian-shi-ti-46-ba-shu-zi-fan-yi-cheng-zi-fu-chua-6/參考鏈接:https://leetcode-cn.com/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof/solution/di-gui-qiu-jie-shuang-bai-by-xiang-shang-de-gua-ni/總結
以上是生活随笔為你收集整理的[剑指offer][JAVA]面试题第[46]题[把数字翻译成字符串][递归][逆推]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: bootstrap-代码-内联代码
- 下一篇: 类似818tu.c微信小说分销系统设计之