剑指 Offer 46. 把数字翻译成字符串

剑指 Offer 46. 把数字翻译成字符串

解题思路:深度优先搜索(dfs)

将数字转成字符串,从第一个字符开始,索引index=0,有两种方案,以12258为例:
方案1:1转换成b
推进1位:dfs(index+1)
方案2:12 < 25,可以转换,index+=2;
推进2位:dfs(index+2)

方案1:占用一位,对于0~9,都是小于25的,所以方案一恒成立
方案2:占用两位,对于1025,推进,dfs(index+2);对于2699,不推进

终止条件:index==str.length()-1,结束,count++;

特殊情况:506
只能是506 5转f,0转a,6转g
06不能组合,因此加一条判断条件,如果str[index]=='0',不执行方案2.

代码

class Solution {
public:
    int count;
    string str;
    void dfs(int index)
    {
        if(index>=str.length()-1)
        {
            count++;
            return;
        }
        dfs(index+1);
        string temp=str.substr(index,2);
        stringstream ss;
        ss<<temp;
        int n;
        ss>>n;
        if(n<=25&&str[index]!='0')
        {
            dfs(index+2);
        }
    }
    int translateNum(int num) {
        count=0;
        stringstream ss;
        ss<<num;
        ss>>str;
        cout<<str<<endl;
        dfs(0);
        return count;
    }
};

posted @ 2020-10-25 15:56  韩天尊  阅读(86)  评论(0)    收藏  举报