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;
    }
Integer to English words leetcode java的更多相关文章
- 【LeetCode】Integer to English Words 解题报告
		Integer to English Words [LeetCode] https://leetcode.com/problems/integer-to-english-words/ Total Ac ... 
- 【LeetCode】273. Integer to English Words
		Integer to English Words Convert a non-negative integer to its english words representation. Given i ... 
- leetcode-【hard】273. Integer to English Words
		题目: 273. Integer to English Words Convert a non-negative integer to its english words representation ... 
- Mybatis的失误填坑-java.lang.Integer cannot be cast to java.lang.String
		Mybatis的CRUD小Demo 为方便查看每次的增删改结果,封装了查询,用来显示数据库的记录: public static void showInfo(){ SqlSession session ... 
- “无效数字” ;java.lang.Integer cannot be cast to java.lang.String
		今天页面上突然查询不出数据,大致的sql语句是 select xx ,xxx from table a where a.lrmb in ( 6101060033, 61010503300, 61016 ... 
- N-Queens II leetcode java
		题目: Follow up for N-Queens problem. Now, instead outputting board configurations, return the total n ... 
- JSONObject转换Int类型--java.lang.Integer cannot be cast to java.lang.String
		参数 params={"abc":0} JSONObject转换Int类型 JSONObject json = JSONObject.fromObject(params); if ... 
- java 解决 java.lang.Integer cannot be  cast to java.lang.String
		1.在执行代码打印map的value时,提示错误java.lang.Integer cannot be cast to java.lang.String,这个错误很明显是类型转换错误 查看表字段的数 ... 
- java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
		1.错误描写叙述 java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String service. ... 
随机推荐
- Graph Convolutional Networks (GCNs) 简介
			Graph Convolutional Networks 2018-01-16 19:35:17 this Tutorial comes from YouTube Video:https://www ... 
- Images之管理image
			Manage images The easiest way to make your images available for use by others inside or outside your ... 
- Kylin简介
			来源 Cube: 用空间换时间(类似:BI分析) 预计算把用户需要查询的维度以及他们所对应的考量的值,存储在多维空间里 当用户查询某几个维度的时候,通过这些维度条件去定位到预计算的向量空间,通过再聚合 ... 
- mybatis动态传入表名、列名
			原文:http://luoyu-ds.iteye.com/blog/1517607 要实现动态传入表名.列名,需要做如下修改 添加属性statementType=”STATEMENT” (可省略) 同 ... 
- 20165306学习基础和C语言基础调查
			20165306学习基础和C语言基础调查 技能学习心得 我认为兴趣.责任感.毅力对技能的获得非常重要. 因为我从小五音不全.肢体不协调,所以看春晚等节目的时候会把更多的关注点放在主持人身上.小时候觉得 ... 
- 每天一个小程序—0000题(python图像处理)
			第 0000 题: 将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果. 类似于图中效果 python中的pillow库是专门用于处理图像的. from PIL ... 
- HDU 5442 Favorite Donut(暴力 or 后缀数组 or 最大表示法)
			http://acm.hdu.edu.cn/showproblem.php?pid=5442 题意:给出一串字符串,它是循环的,现在要选定一个起点,使得该字符串字典序最大(顺时针和逆时针均可),如果有 ... 
- MySQL GROUP BY语句
			GROUP BY 语句根据一个或多个列对结果集进行分组 在分组的列上我们可以使用COUNT.SUM.AVG等函数 SELECT column_name,function(column_name) FR ... 
- 基于 Python 和 Pandas 的数据分析(2) --- Pandas 基础
			在这个用 Python 和 Pandas 实现数据分析的教程中, 我们将明确一些 Pandas 基础知识. 加载到 Pandas Dataframe 的数据形式可以很多, 但是通常需要能形成行和列的数 ... 
- OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000083e80000, 1366294528, 0) failed;
			我是在手动搭建nexus时遇到的 安装nexus时 启动命令的时候会报OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000 ... 
