剑指offer-46
Posted cgy1012
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer-46相关的知识,希望对你有一定的参考价值。
1 0-25 a-z
// 面试题46:把数字翻译成字符串 // 题目:给定一个数字,我们按照如下规则把它翻译为字符串:0翻译成"a",1翻 // 译成"b",……,11翻译成"l",……,25翻译成"z"。一个数字可能有多个翻译。例 // 如12258有5种不同的翻译,它们分别是"bccfi"、"bwfi"、"bczi"、"mcfi"和 // "mzi"。请编程实现一个函数用来计算一个数字有多少种不同的翻译方法。 #include <string> #include <iostream> using namespace std; int GetTranslationCount(const string& number); int GetTranslationCount(int number) if (number < 0) return 0; string numberInString = to_string(number);//转换成字符串 return GetTranslationCount(numberInString); int GetTranslationCount(const string& number) int length = number.length(); int* counts = new int[length]; int count = 0; for (int i = length - 1; i >= 0; --i)//从右开始计算,避免递归中碰到重复的子问题 count = 0; if (i < length - 1) count = counts[i + 1]; else count = 1; if (i < length - 1) int digit1 = number[i] - ‘0‘; int digit2 = number[i + 1] - ‘0‘; int converted = digit1 * 10 + digit2; if (converted >= 10 && converted <= 25)//满足条件,记录当前位置所有可能的次数 if (i < length - 2)//有点动态规划的意思 count += counts[i + 2]; else count += 1; counts[i] = count; count = counts[0];//返回counts第一个值 delete[] counts; return count;
以上是关于剑指offer-46的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode1442. 形成两个异或相等数组的三元组数目 / 剑指 Offer 46. 把数字翻译成字符串 / 剑指 Offer 47. 礼物的最大价值