【剑指offer】【递归】46. 把数字翻译成字符串
题目链接:https://leetcode-cn.com/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof/
递归
class Solution {
public:
int translateNum(int num) {
if(num <= 9) return 1;
int ba = num % 100;
if(ba <= 9 || ba >= 26) return translateNum(num / 10);
else return translateNum(num / 10) + translateNum(num / 100);
}
};
动态规划
思路
2 <= i < len(str)
if str[i]和str[i-1]构成的数字 < 26:
dp[i] = dp[i-1] + dp[i-2] #等于前两项之和
else:
dp[i] = dp[i-1] #不受影响直接等于前一项
class Solution {
public:
int translateNum(int num) {
string str = to_string(num);
int n = str.size();
if(n == 1) return 1;
vector<int> dp(n, 0);
dp[0] = 1;
if((str[0] - '0') * 10 + str[1] - '0' < 26) dp[1] = 2;
else dp[1] = 1;
for(int i = 2; i < n; i++)
{
if((str[i - 1] - '0') * 10 + str[i] - '0' < 26 && str[i - 1] != '0')
dp[i] = dp[i - 1] + dp[i - 2];
else
dp[i] = dp[i - 1];
}
return dp[n - 1];
}
};
知识的价值不在于占有,而在于使用