面試題46. 把數字翻譯成字符串
給定一個數字,我們按照如下規則把它翻譯爲字符串:0 翻譯成 “a” ,1 翻譯成 “b”,……,11 翻譯成 “l”,……,25 翻譯成 “z”。一個數字可能有多個翻譯。請編程實現一個函數,用來計算一個數字有多少種不同的翻譯方法。
思路:
這題其實和斐波那契數列很像,f(n) = f(n-1)+f(n-2)。但是f(n-2)多了一個限制,只有在10-25之間的數才滿足。
int translateNum(int num) {
string str = to_string(num);
int f_1 = 1; //第一個數肯定可以轉換
int f_2 = 1; //當滿足條件時,f(1)=1,不爲0
int f = 1; //如果長度只有1 , 設初始值爲1
for(int i = 1; i < str.size(); ++i)
{
string n = str.substr(i-1, 2);
if(n<="25" && n >="10")
{
f = f_1 + f_2;
}
else
{
f = f_1;
}
f_2 = f_1;
f_1 = f;
}
return f;
}