1.トピック
所与デジタル、我々は、文字列変換するために、次の規則に従う:
0は"A"に翻訳し、
"B"に翻訳1、......、
"L"に翻訳11、...、
25が"Z"に翻訳します。
デジタル変換よりもあるかもしれません。多くの異なる方法が翻訳を持っている数を計算する方法に機能をプログラミングしてください。
示例 1:
输入: 12258
输出: 5
解释: 12258有5种不同的翻译,
分别是"bccfi", "bwfi", "bczi", "mcfi"和"mzi"
提示:
0 <= num < 2^31
出典:滞在ボタン(LeetCode)
リンクします。https://leetcode-cn.com/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof
すべてのネットワークからの控除が著作権を保有。商業転載は、ソースを明記してください許可公式、非商用の転載をご連絡ください。
2.問題解決
- フィボナッチ数に似た動的なプログラミング、
- DP [i]はI-文字変換でプログラムの数を表し、
- DP [0]空の文字列の数スキーム1
- DP [1]最初の数字は、翻訳の唯一の一種であります
str[i-2]=='1' ||(str[i-2]=='2' && str[i-1] <='5')
、2つの文字は、2を翻訳することができ、組み合わせることもできます- 残りの症例は、単一に変換することができます
class Solution {
public:
int translateNum(int num) {
string str = to_string(num);
int i, n = str.size();
int dp[n+1] = {0};
dp[0] = 1;//第0个字符空串
dp[1] = 1;//第一个字符翻译,只有1种可能
for(i = 2; i <= n; ++i)
{
if(str[i-2]=='1' ||(str[i-2]=='2' && str[i-1] <='5'))
//该种情况,可以把这两位数,翻成1个或者2个字符
dp[i] = dp[i-2]+dp[i-1];
else//34,29,只能单独翻译
dp[i] = dp[i-1];
}
return dp[n];
}
};