解题思路
使用递归进行组合(深度优先)
首先构建一个函数traverse()
:进行遍历
第一步是每一个数可以形成一个字符
第二步是每两个数可能形成一个字符
第一步使用 traverse(s,point+1);
第二步应该考虑0 和 25
当 当前 的数为0 或者大于25时,不再进行两个数字的组合
if(n!=0){// 如果当前为0的元素,那么只进行一个数的操作,而不是组合两个数
String num = s.charAt(point)+""+s.charAt(point+1);
n = Integer.valueOf(num);
count += n>25 ? 0 : traverse(s,point+2);
}
代码
class Solution {
public int translateNum(int num) {
String s = num + "";
return traverse(s,0);
}
public int traverse(String s, int point){
if(point>=s.length()-1) return 1;
int n = 0;
int count = 0;
n = Integer.valueOf(s.charAt(point)+"");
count += traverse(s,point+1);
if(n!=0){// 如果当前为0的元素,那么只进行一个数的操作,而不是组合两个数
String num = s.charAt(point)+""+s.charAt(point+1);
n = Integer.valueOf(num);
count += n>25 ? 0 : traverse(s,point+2);
}
return count;
}
}
// 如果前后大于25,那么不进行组合
// 终止条件是:已经组合到最后的数字了 point>=s.length()
// 深度优先,对0进行特殊处理