• Integer to English words leetcode java


    问题描述:

    Convert a non-negative integer to its english words representation. Given input is guaranteed to be less than 231 - 1.

    For example,

    123 -> "One Hundred Twenty Three"
    12345 -> "Twelve Thousand Three Hundred Forty Five"
    1234567 -> "One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"

    方法一:自己写的,没有层次感,看起来不够清晰
    
    
     static String[][] enStr = {
                {"","One","Two","Three","Four","Five","Six","Seven","Eight","Nine","Ten","Eleven","Twelve","Thirteen","Fourteen",
                    "Fifteen","Sixteen","Seventeen","Eighteen","Nineteen"}, //1-19
                {"","","Twenty","Thirty","Forty","Fifty","Sixty","Seventy","Eighty","Ninety"} // 20-90
        };
        public String numberToWords(int num) {
           if(num < 0) //非负整数
                return null;
            String english = "";
            int remain = 0; 
            if(num / 20 == 0) {//1-19
                if(num == 0) //num == 0单独处理
                    return "Zero";
                return enStr[0][num];        
            } else if(num / 100 == 0){ //20-99
                if(num % 10 == 0) //若是20,30,40,50,...,90
                    return enStr[1][num / 10];
                else
                    return enStr[1][num / 10] + " " + enStr[0][num % 10];
            } else if(num / 1000 == 0){//100-999
                int h = num / 100; 
                remain = num % 100;
                if(remain >= 20 && remain % 10 ==0){
                    english = enStr[0][h] + " Hundred " + enStr[1][remain / 10];
                } else if(remain >= 20 && remain % 10 > 0){
                    english = enStr[0][h] + " Hundred " + enStr[1][remain / 10] + " " + enStr[0][remain % 10];
                } else if(remain == 0){
                    english = enStr[0][h] + " Hundred";
                } else {
                    english = enStr[0][h] + " Hundred " + enStr[0][remain];
                }
                return english;
            } else if(num / 1000000 == 0){ //1000-999999
                int th = num / 1000;
                remain = num % 1000;
                if(remain == 0){
                    return numberToWords(th) + " Thousand";
                }
                return  numberToWords(th) + " Thousand " + numberToWords(remain);
            } else if(num / 1000000000 == 0) {//1000000-999999999
                int mi = num / 1000000;
                remain = num % 1000000;
                if(remain == 0){
                    return numberToWords(mi) + " Million";
                }
                return  numberToWords(mi) + " Million " + numberToWords(remain);
            } else { //1000000000-9999999999
                int bi = num / 1000000000;
                remain = num % 1000000000;
                if(remain == 0){
                    return numberToWords( bi) + " Billion";
                }
                return numberToWords(bi) + " Billion " + numberToWords(remain);
            }
        }
    
    
    
    方法二:代码整齐,参考别人的
     public String numberToWords(int num) {
            if (num < 0) {
                return "";
            }
     
            //数字为0直接返回
            if (num == 0) {
                return "Zero";
            }
     
            //左起段落
            int segment1 = num / 1000000000;           //段落1:十亿位-千亿位
            int segment2 = num % 1000000000 / 1000000; //段落2:百万位-亿位
            int segment3 = num % 1000000 / 1000;       //段落3:千位-十万位
            int segment4 = num % 1000;                 //段落4:个位-百位
     
            String result = "";
             
            if (segment1 > 0) {
                result += numToWordsLessThan1000(segment1) + " " + "Billion";
            }
            if (segment2 > 0) {
                result += numToWordsLessThan1000(segment2) + " " + "Million";
            }
            if (segment3 > 0) {
                result += numToWordsLessThan1000(segment3) + " " + "Thousand";
            }
            if (segment4 > 0) {
                result += numToWordsLessThan1000(segment4);
            }
     
            return result.trim(); //去掉字符串首尾的空格
        }
        
       private String numToWordsLessThan1000(int num) {
             
            if (num == 0 || num >= 1000) {
                return "";
            }
             
            String result = "";
            if (num >= 100) {
                result += numToWordsBase(num / 100) + " " + "Hundred";
            }
            num = num % 100;
            if (num > 20) {
                result += numToWordsBase(num / 10 * 10);
                if (num % 10 != 0) { 
                    result += numToWordsBase(num % 10);
                }
            } else if (num > 0) {
                result += numToWordsBase(num);
            }
             
            return result;
        }
        
        private String numToWordsBase(int num) {
            String result = " ";
            switch (num) {
            case 1: result += "One"; break;
            case 2: result += "Two"; break;
            case 3: result += "Three"; break;
            case 4: result += "Four"; break;
            case 5: result += "Five"; break;
            case 6: result += "Six"; break;
            case 7: result += "Seven"; break;
            case 8: result += "Eight"; break;
            case 9: result += "Nine"; break;
            case 10: result += "Ten"; break;
            case 11: result += "Eleven"; break;
            case 12: result += "Twelve"; break;
            case 13: result += "Thirteen"; break;
            case 14: result += "Fourteen"; break;
            case 15: result += "Fifteen"; break;
            case 16: result += "Sixteen"; break;
            case 17: result += "Seventeen"; break;
            case 18: result += "Eighteen"; break;
            case 19: result += "Nineteen"; break;
            case 20: result += "Twenty"; break;
            case 30: result += "Thirty"; break;
            case 40: result += "Forty"; break;
            case 50: result += "Fifty"; break;
            case 60: result += "Sixty"; break;
            case 70: result += "Seventy"; break;
            case 80: result += "Eighty"; break;
            case 90: result += "Ninety"; break;
            }
            return result;
        }
  • 相关阅读:
    一、Vue简介
    十四、GridLayout 网格布局
    二十二、ViewPager
    四、vbind练习(实现li标签点击后变色)
    三、动态绑定属性(Class)
    二、插值操作
    顺序的fqlist拆解成sample fqsize fq格式 ,涉及正则取样本名
    faidx提取fasta指定位置allele
    GATK GenotypeConcordance 比较vcf一致性:Sequence dictionaries are not the same size
    subset 函数 选择数据框/向量的子集
  • 原文地址:https://www.cnblogs.com/mydesky2012/p/5035919.html
Copyright © 2020-2023  润新知