求方案数可以用动态规划解决,输出所有方案可以用回溯解决,注意两位的时候能转换条件的处理。
class Solution {
public:
int translateNum(int num) {
// dp[i] 表示将num的前i位成字母的方法数
// dp[i] = dp[i-1] + dp[i-2]
string s = to_string(num);
int n = s.size();
s = ""+s;
vector<int> dp(n+1);
dp[0] = 1;
dp[1] = 1;
for(int i=2;i<=n;i++){
dp[i] = dp[i-1];
if(s[i-2]=='1'||(s[i-2]=='2'&&s[i-1]>='0'&&s[i-1]<='5')) dp[i]+=dp[i-2];
}
return dp[n];
}
};