思路:dfs
又是一道dfs的题目。做法基本上是一样的,本题难度其实已经被减少了,正常来说,应该让打印所有可能的串。
我的做法是先将数分解,然后从最高位开始搜索,每次可以前进1步或两步(前提是满足值<=25)。最后累计一下即可。
class Solution {
public:
int bit[100];
int n;
int ans=0;
int translateNum(int num) {
memset(bit,0,sizeof(bit));
int k=0;
vector<int> vec;
while(num)
{
vec.push_back(num%10);
num/=10;
k++;
}
n=k;
int j=0;
for(int i=k-1;i>=0;i--)
{
bit[j]=vec[i];
//cout<<bit[j]<<endl;
j++;
}
cout<<n<<endl;
ans=0;
dfs(0);
return ans;
}
void dfs(int k)
{
if(k>=n)
{
if(k==n)
{
ans++;
}
}
// cout<<k<<endl;
for(int i=k;i<=k+1&&i<n;i++)
{
//cout<<i<<" "<<k<<endl;
if(i==k)
{
dfs(k+1);
}
else
{
int tmp=bit[k]*10+bit[k+1];
if(bit[k]>0&&tmp<=25)
{
dfs(k+2);
}
}
}
}
};