剑指 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;
}
};