题目
给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。链接
思路
写了个dfs居然还双百ac了。。由于数字组合在26以内可翻译,即每次选择两个字符时需要判断是否小于26。直接dfs,动态规划可能好点,但是没想到。。
class Solution {
private char[]number;
private int res;
public int translateNum(int num) {
number=String.valueOf(num).toCharArray();
helper(0);
return res;
}
void helper(int idx){
if(idx==number.length){
res++;
return;
}
//idx+1一定可以到length
helper(idx+1);
//idx+1小于length确保idx+2一定不会超过length
if(idx+1<number.length&&cal(number[idx],number[idx+1])<26){
helper(idx+2);
}
}
int cal(char c1,char c2){
//组合数字时第一个不能为0
if(c1=='0'){
return 26;
}
return (c1-'0')*10+c2-'0';
}
}