LeetCode 面试题46. 把数字翻译成字符串(DFS求路径总数、动态规划)

把数字翻译成字符串

DFS的基本做法,每次前进一位或者两位,搜到终点,累积加1。

class Solution {
public:
    string s;
    int ans = 0;
    int translateNum(int num) {
        s = to_string(num);
        dfs(s,0);
        return ans;
    }
    void dfs(string &s,int idx){
        if(idx==s.size()){
            ans++;
            return;
        }
        dfs(s,idx+1);
        if(idx+1<s.size() && check(s.substr(idx,2))){
            dfs(s,idx+2);
        }
    }
    bool check(string s){
        char a = s[0];
        if(a=='0'){
            return false;
        }
        char b = s[1];
        return int(a-'0')*10 + int(b-'0') <= 25;
    }
};

DP做法:
类似于一百节台阶,每次跳一阶后者两阶,一共有多少种跳法。

class Solution {
public:
    int f[15] = {1,1};
    int translateNum(int num) {
        string s = to_string(num);
        for(int i=2;i<=s.size();i++){
            f[i] = f[i-1]+ (check(s.substr(i-2,2))?f[i-2]:0);
        }
        return f[s.size()];
    }
    bool check(string s){
        char a = s[0];
        if(a=='0'){
            return false;
        }
        char b = s[1];
        return int(a-'0')*10 + int(b-'0') <= 25;
    }    
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章