剑指offer 数字翻译成字符串

0 -> 'a', 1->'b', ..., 11 -> 'l', ..., 25->'z'. 计算一个数有多少种不同的翻译方法。

分析:记f[i]表示从第i位起的不同翻译数目。

f[i] = f[i + 1] + g(i, i + 1) * f[i + 2]. g(i, i + 1)拼起来的数字如果在10-25之间,则为1,否则为0.

 1 int GetTranslationCount(int number) {
 2     if (number < 0) {
 3         return 0;
 4     }
 5     string numberInstring = to_string(number);
 6     return GetTranslationCount(numberInstring);
 7 }
 8 
 9 int GetTranslationCount(const string& number) {
10     int len = number.length();
11     int *count = new int[length];
12     int count = 0;
13     for (int i = len - 1; i >= 0; i--) {
14         count = 0;
15         if (i < len - 1) {
16             count = counts[i + 1];
17         } else {
18             count = 1;
19         }
20         if (i < len - 1) {
21             int digit1 = numbers[i] - '0';
22             int digit2 = numbers[i + 1] - '0';
23             int converted = digit1 * 10 + digit2;
24             if (converted >= 10 && converted <= 25) {
25                 if (i < len - 2) {
26                     count += counts[i + 2];
27                 } else {
28                     count += 1;
29                 }
30             }
31         }
32         counts[i] = count;
33     }
34     count = counts[0];
35     delete[] counts;
36     return count;
37 }

 

posted @ 2019-08-26 00:02  琴影  阅读(196)  评论(0编辑  收藏  举报