Leetcode 273 Integer to English Words

在这里插入图片描述
思路: 这题思路很简单,就是数字转文字,每三个数字为一组。刚看到这题的发现是hard,以为很难,但是想了想,做法很简单,也很容易想到。后来在做的时候才发现这道题的真谛是什么,eage case的处理,我写代码写了半小时,debug花了半个多小时。后来发现几乎都是eage case的问题。这侧面也体现了我逻辑并不严谨。这道题这么多test case,就是为了考察我们大家考虑地是否周到,很明显我并没有考虑地很周全。下面就展示一下代码:

class Solution {
    public String numberToWords(int num) {
        if(num == 0){return "Zero";}
        int[] array = new int[4];
        array[0] = num / 1000000000;
        array[1] = num / 1000000 % 1000;
        array[2] = num / 1000 %1000;
        array[3] = num % 1000;
        Map<Integer,String> mappings = new HashMap<>();
        mappings.put(0,"Billion");
        mappings.put(1,"Million");
        mappings.put(2,"Thousand");
        mappings.put(3,"");
        Map<Character,String> sigleMappings = new HashMap<>();
        sigleMappings.put('1',"One");
        sigleMappings.put('2',"Two");
        sigleMappings.put('3',"Three");
        sigleMappings.put('4',"Four");
        sigleMappings.put('5',"Five");
        sigleMappings.put('6',"Six");
        sigleMappings.put('7',"Seven");
        sigleMappings.put('8',"Eight");
        sigleMappings.put('9',"Nine");
        Map doubleMappings = new HashMap();
        doubleMappings.put('1',"Ten");
        doubleMappings.put('2',"Twenty");
        doubleMappings.put('3',"Thirty");
        doubleMappings.put('4',"Forty");
        doubleMappings.put('5',"Fifty");
        doubleMappings.put('6',"Sixty");
        doubleMappings.put('7',"Seventy");
        doubleMappings.put('8',"Eighty");
        doubleMappings.put('9',"Ninety");
        doubleMappings.put("10","Ten");
        doubleMappings.put("11","Eleven");
        doubleMappings.put("12","Twelve");
        doubleMappings.put("13","Thirteen");
        doubleMappings.put("14","Fourteen");
        doubleMappings.put("15","Fifteen");
        doubleMappings.put("16","Sixteen");
        doubleMappings.put("17","Seventeen");
        doubleMappings.put("18","Eighteen");
        doubleMappings.put("19","Nineteen");
          
        String res = "";
        for(int i = 0; i < 4; i++){
            if(array[i] == 0){continue;}
            else{
                String ss = String.valueOf(array[i]);
                if(ss.length() == 1){
                    res += sigleMappings.get(ss.charAt(0)) + " " + mappings.get(i) + " ";
                }else if(ss.length() == 2){
                    if(ss.charAt(0) == '1'){res += doubleMappings.get(ss)+ " " + mappings.get(i) + " ";}
                    else if(ss.charAt(1) == '0'){res += doubleMappings.get(ss.charAt(0))+ " "+mappings.get(i)+ " ";}
                    else{res += doubleMappings.get(ss.charAt(0))+ " " + sigleMappings.get(ss.charAt(1)) +" "+ mappings.get(i)+ " ";}
                }else{
                    if(ss.charAt(1) == '0' && ss.charAt(2) == '0'){
                        res += sigleMappings.get(ss.charAt(0))+ " " + "Hundred" + " "+mappings.get(i) + " ";    
                    }else if(ss.charAt(2) == '0'){
                        res += sigleMappings.get(ss.charAt(0))+ " " + "Hundred" +" "+ doubleMappings.get(ss.charAt(1))+" " + mappings.get(i)+" ";
                    }else if(ss.charAt(1) == '0' ){
                        res +=  sigleMappings.get(ss.charAt(0)) + " "+ "Hundred" +" "+ sigleMappings.get(ss.charAt(2)) +" "+ mappings.get(i)+ " ";
                    }else if(ss.charAt(1) == '1'){
                        res += sigleMappings.get(ss.charAt(0)) +" "+ "Hundred" +" "+ doubleMappings.get(ss.substring(1)) + " " + mappings.get(i) + " ";
                    }else{
                        res += sigleMappings.get(ss.charAt(0)) +" "+ "Hundred" +" "+ doubleMappings.get(ss.charAt(1)) +" "+ sigleMappings.get(ss.charAt(2)) +" "+ mappings.get(i)+" ";
                    }
                }    
            }
        }
        res = res.trim();
        
        return res;
    }
}

总结:

  1. 要严谨!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值