給定乙個數字,我們按照如下規則把它翻譯為字串:0翻譯成「a」,1翻譯成「b」,……,25翻譯成「z」。乙個數字可能有多種翻譯。例如,12258有5種不同的翻譯,分別是「bccfi」、「bwfi」、「bczi」、「mcfi」、「mzi」。求乙個數字有多少種不同的翻譯方法?解題思路
上**(c++香)
法一:回溯法,很easy
法二:動態規劃int countn = 0;
// 回溯法
void dfs(int num, int n, int index)
// 如果當前值是1,並且後面至少還有1位數
if((num[index] == 1) && (index < n - 1))
dfs(num, n, index + 2);
// 如果當前值是2,並且後面至少還有1位數,並且下一位小於6
else if((num[index] == 2) && (index < n - 1) && (num[index + 1] < 6))
dfs(num, n, index + 2);
// 也可以只走一步
dfs(num, n, index + 1);
}
找到狀態轉移方程:\(f(i)=f(i+1)+g*f(i+2)\),其中當第i位數字和第i+1兩位數字拼接起來的數字在10~25之間時,g為1,否則為0。
int gettranslationcount(const string& number)
}counts[i] = count;
}count = counts[0];
delete counts;
return count;
}int gettranslationcount(int number)
面試題46 把數字翻譯成字串
給定乙個數字,我們按照如下規則把它翻譯為字串 0 翻譯成 a 1 翻譯成 b 11 翻譯成 l 25 翻譯成 z 乙個數字可能有多個翻譯。請程式設計實現乙個函式,用來計算乙個數字有多少種不同的翻譯方法。示例 1 輸入 12258 輸出 5 解釋 12258有5種不同的翻譯,分別是 bccfi bwf...
Java 面試題46 把數字翻譯成字串
給定乙個數字,按照如下規則翻譯成字串 0翻譯成 a 1翻譯成 b 25翻譯成 z 乙個數字有多種翻譯可能,例如12258一共有5種,分別是bccfi,bwfi,bczi,mcfi,mzi。實現乙個函式,用來計算乙個數字有多少種不同的翻譯方法。分析思路 用遞迴自頂向下分析,用動態規劃自低向上求解 定義...
面試題46 把陣列翻譯成字串
題目描述 給定乙個數字,我們按照如下規則把它翻譯成字串 0翻譯成 a 1翻譯成 b 25翻譯成 z 乙個數字可能有多個翻譯,例如,12258有5種不同的翻譯,分別是 bccfi bwfi bczi mcfi mzi 請程式設計實現乙個函式,用來計算乙個數字有多少種不同的翻譯方法。動態規劃 舉例來分析...