问题描述:

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的更多相关文章

  1. 【LeetCode】Integer to English Words 解题报告

    Integer to English Words [LeetCode] https://leetcode.com/problems/integer-to-english-words/ Total Ac ...

  2. 【LeetCode】273. Integer to English Words

    Integer to English Words Convert a non-negative integer to its english words representation. Given i ...

  3. leetcode-【hard】273. Integer to English Words

    题目: 273. Integer to English Words Convert a non-negative integer to its english words representation ...

  4. Mybatis的失误填坑-java.lang.Integer cannot be cast to java.lang.String

    Mybatis的CRUD小Demo 为方便查看每次的增删改结果,封装了查询,用来显示数据库的记录: public static void showInfo(){ SqlSession session ...

  5. “无效数字” ;java.lang.Integer cannot be cast to java.lang.String

    今天页面上突然查询不出数据,大致的sql语句是 select xx ,xxx from table a where a.lrmb in ( 6101060033, 61010503300, 61016 ...

  6. N-Queens II leetcode java

    题目: Follow up for N-Queens problem. Now, instead outputting board configurations, return the total n ...

  7. JSONObject转换Int类型--java.lang.Integer cannot be cast to java.lang.String

    参数 params={"abc":0} JSONObject转换Int类型 JSONObject json = JSONObject.fromObject(params); if ...

  8. java 解决 java.lang.Integer cannot be cast to java.lang.String

    1.在执行代码打印map的value时,提示错误java.lang.Integer cannot be  cast to java.lang.String,这个错误很明显是类型转换错误 查看表字段的数 ...

  9. 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. ...

随机推荐

  1. 【基本知识】Flume基本环境搭建以及原理

    系统:CentOS6.5JDK:1.8.0_144Flume:flume-ng-1.6.0-cdh5.12.0 一.什么是Flume flume 作为 cloudera 开发的实时日志收集系统,受到了 ...

  2. SSM项目 单元测试中 注入bean 空指针异常

    ##特别 由于准备春招,所以希望各位看客方便的话,能去github上面帮我Star一下项目https://github.com/Draymonders/Campus-Shop java.lang.Nu ...

  3. 深度学习课程笔记(五)Ensemble

    深度学习课程笔记(五)Ensemble  2017.10.06 材料来自: 首先提到的是 Bagging 的方法: 我们可以利用这里的 Bagging 的方法,结合多个强分类器,来提升总的结果.例如: ...

  4. CentOS7使用httpd apache 和firewalld打开关闭防火墙与端口

    Centos7 使用systemctl 工具操作命令 systemctl 是Centos7的服务管理工具中的主要工具 ,它融合之前service和chkconfig的功能于一体 一.httpd的设置 ...

  5. .NET 介绍

    In order to continue our effort of being modular and well factored we don’t just provide the entire ...

  6. HDU 6249 Alice’s Stamps(dp)

    http://acm.hdu.edu.cn/showproblem.php?pid=6249 题意: 给出n个区间,求选k个区间的最大区间并. 思路: 可能存在左端点相同的多个区间,那么此时我们肯定选 ...

  7. Http_code码

    _codes = { : (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: (: ...

  8. 【Python】【socket】

    [server.py] """#练习1import socketimport threading sock = socket.socket()sock.bind(('12 ...

  9. _killerstreak

    `count`连杀或终结连杀的数量(最大支持10个) `announceFlag` 0-不广播1-只广播连杀消息2-只广播终结连杀消息3-广播连杀与终结连杀消息 `rewId` 连杀奖励模板Id,对应 ...

  10. ros 充电topic

    #!/usr/bin/env python #coding=utf- import rospy from std_msgs.msg import String i= def talker(): glo ...