LeetCode面试题46. 把数字翻译成字符串

题目

给定一个数字,我们按照如下规则把它翻译为字符串: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';
    }
}

猜你喜欢

转载自blog.csdn.net/qq_42007742/article/details/106651510