https://leetcode-cn.com/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof/
思路:爲了方便,我們把輸入轉換成一個字符串,並且下標從開始,用表示對應的數字有多少種不同的翻譯方法。顯然單個數字一定可以對應一種翻譯方法,所以有,如果是兩個數字的話,我們需要計算然後判斷它和的關係(注意特判掉前導的情況),如果也能對應一種翻譯方法的話,就有。注意初始化要使得。
class Solution {
public:
int getval(int i,string &s)
{
if(s[i-1]=='0')//不合題意
return 30;
return (s[i-1]-'0')*10+s[i]-'0';
}
int translateNum(int num) {
stringstream ss;
ss<<" "<<num;
string s=ss.str();
vector<int> dp(s.size());
int len=s.size()-1;
dp[0]=dp[1]=1;//一個數字一定可以翻譯成一個字符
for(int i=2;i<=len;i++)
{
dp[i]+=dp[i-1];//s[i]一個數字一定可以翻譯成一個字符
if(getval(i,s)<=25)//s[i-1]和s[i]可以翻譯成一個字符
dp[i]+=dp[i-2];
}
return dp[len];
}
};