剑指 Offer 46. 把数字翻译成字符串 (方案数动态规划)

求方案数可以用动态规划解决,输出所有方案可以用回溯解决,注意两位的时候能转换条件的处理。

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];
    }

};

猜你喜欢

转载自blog.csdn.net/wwxy1995/article/details/108351068