问题描述:

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. oracle 之 定时任务,存储过程和游标等语法案例

    --定时任务 declare job20 number; begin sys.dbms_job.submit(job20,'test1;',sysdate,'sysdate+1'); end; --存 ...

  2. Java 大数任意进制转换

    import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner cin = ...

  3. String、StringBuffer 的使用 ,两个面试问题

    1>统计不同类型字符个数 public static void main(String[] args) { //案例:统计不同类型字符个数 String password = "abZ ...

  4. Kubernetes相关概念

    This page explains how Kubernetes objects are represented in the Kubernetes API, and how you can exp ...

  5. Python GIL(Global Interpreter Lock)

    一.介绍 In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threa ...

  6. 正则表达式 & re

    本节主要内容: 1.正则表达式 2.re模块的使用 一.正则表达式 正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE), 计算机 ...

  7. 关于导入geoserver 源码到Eclipse编译运行

    参考http://blog.csdn.net/gisshixisheng/article/details/43016443 和  http://blog.sina.com.cn/s/blog_6e37 ...

  8. _event_worldstate

    EventId 事件ID ID WorldStateUI.dbc第10列数字部分 StartValue 起始值 Entry 更新世界状态需要击杀生物或摧毁物体的entry,正数为生物,负数为物体 St ...

  9. 关于spring boot启动监控端点的方法(spring-boot-starter-actuator)

    前言: 在spring boot的旧版本中,监控端点(如/env)是默认开启的,所以只要项目正常启动,就能通过url获取信息.可是在2.0版本以后,由于安全性考虑,除了/health和/info的端点 ...

  10. leetcode 7-> Reverse Integer(32-bit signed integer)

    class Solution(object): def reverse(self, x): """ :type x: int :rtype: int "&quo ...