Integer to English Words
https://leetcode.com/problems/integer-to-english-words/
这题记得是《c 和指针》里的一道习题,三年前花了一晚上做过。现在花了大概40 分钟。
我的思路是三位三位的处理。三位与三位之间通过简单的用量级(Thousand, Million, Billion)拼接。特殊处理两位数的情况:小于20 和大于20 两种情况。
1)小于20 的时候是:'One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten','Eleven', 'Twelve', 'Thirteen', 'Fourteen', 'Fifteen', 'Sixteen', 'Seventeen', 'Eighteen', 'Nineteen'
2)大于20 的时候,就是十位数的量级加上个位数,十位数的量级是:'Twenty', 'Thirty', 'Forty', 'Fifty', 'Sixty', 'Seventy', 'Eighty', 'Ninety';个位数可以重用上面小于20 时候的情况。
举例:12345 按三位分割的话写成:12,345
先处理 345
百位和十位分开处理 3 45
判断45 这个十位数十大于20 还是小于20,在这里是大于20 的,所以采用方式2
十位量级Forty 加上 各位量级 Five 最后等于 Forty Five
然后处理百位,百位是3,简单的用Three 加上量级Hundred
最后生成 Three Hundred Forty Five
此时第一组三位数处理完毕:12,345
处理12
按照同样的方法,判断其小于20,直接在情况1 的表里查询查询到其是Twelve
此时整个12345 被分成两个三元组并处理完毕,第二个三元组简单的拼接上量词Thousand 以后与前一个三元组的结果拼接:
Twelve [Thousand] Three Hundred Forty Five
各种edge case 需要处理,一是对于0 的处理,脏一点直接判断孰否为0,直接返回Zero,还有在处理三元组的时候需要判断各个元组是否为0
/**
* @param {number} num
* @return {string}
*/
var a = [
['One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten','Eleven', 'Twelve', 'Thirteen', 'Fourteen', 'Fifteen', 'Sixteen', 'Seventeen', 'Eighteen', 'Nineteen'],
['Twenty', 'Thirty', 'Forty', 'Fifty', 'Sixty', 'Seventy', 'Eighty', 'Ninety']
];
var delim = [
'Thousand',
'Million',
'Billion'
]
var numberToWords = function(num) {
var d = 0;
ret = [];
if (num === 0) return 'Zero';
while (num > 0) {
var w = convertTriple(num % 1000);
if (w.length > 0) {
if (d > 0) {
ret.unshift(delim[d - 1]);
}
ret = w.concat(ret);
}
d++;
num = parseInt(num / 1000);
}
return ret.join(" ");
} function convertTriple(triple) {
var ret = [];
if (triple === 0) return ret;
//deal with tenth
var tuple = triple % 100;
if (tuple > 0) {
if (tuple < 20) {
ret.push(a[0][tuple - 1]);
} else {
var g = tuple % 10;
var tenth = Math.floor(tuple / 10);
if (tenth > 1) {
ret.push(a[1][tenth - 2]);
}
if (g > 0) {
ret.push(a[0][g - 1]);
}
}
} //deal with hundred
var hundred = Math.floor(triple / 100);
if (hundred > 0) {
ret.unshift('Hundred');
ret.unshift(a[0][hundred - 1]);
}
return ret;
}
Integer to English Words的更多相关文章
- leetcode-【hard】273. Integer to English Words
题目: 273. Integer to English Words Convert a non-negative integer to its english words representation ...
- 【LeetCode】273. Integer to English Words
Integer to English Words Convert a non-negative integer to its english words representation. Given i ...
- 【LeetCode】Integer to English Words 解题报告
Integer to English Words [LeetCode] https://leetcode.com/problems/integer-to-english-words/ Total Ac ...
- [LeetCode] Integer to English Words 整数转为英文单词
Convert a non-negative integer to its english words representation. Given input is guaranteed to be ...
- LeetCode Integer to English Words
原题链接在这里:https://leetcode.com/problems/integer-to-english-words/ Convert a non-negative integer to it ...
- 273. Integer to English Words
题目: Convert a non-negative integer to its english words representation. Given input is guaranteed to ...
- leetcode@ [273] Integer to English Words (String & Math)
https://leetcode.com/problems/integer-to-english-words/ Convert a non-negative integer to its englis ...
- Integer to English Words 解答
Question Convert a non-negative integer to its english words representation. Given input is guarante ...
- [Swift]LeetCode273. 整数转换英文表示 | Integer to English Words
Convert a non-negative integer to its english words representation. Given input is guaranteed to be ...
- Integer to English words leetcode java
问题描述: Convert a non-negative integer to its english words representation. Given input is guaranteed ...
随机推荐
- webApp开发
1.Viewport:视口屏幕,可以操作的属性如下: width //viewport的宽度,范围从200-10000,默认为980像素 height //viewport的高度 initial-sc ...
- linux tomcat 启动
在tomcat bin目录下启动时报权限不够 在bin目录下输入:chmod u+x *.sh 可解决 查看tomcat 是否关闭 ps -ef|grep java 例如显示如下 说明还没关闭root ...
- selenium 等待页面加载完成
一.隐形加载等待: file:///C:/Users/leixiaoj/Desktop/test.html 该页面负责创建一个div <html> <head> <tit ...
- boostrap 模态框
<div class="modal fade" id="myModal" tabindex="-1" role="dialo ...
- virtualbox设置共享文件夹代替sftp同步代码
通常的开发场景: 代码放在virtualbox上运行,本地的IDE通过sftp实现和虚拟机的代码同步. 有 一个不能避免的问题是,当使用git时,如果装在virtualbox端,那么每次virtual ...
- Redis实战阅读笔记——第一章
Redis 实战 中文版 的20-21页看的人郁闷死了,最后看英文版才明白意思,哎,我理解能力差成这样了 其中,图 1-12 有错误,草,这个是英文版的错--应该是group:programming
- Java中Runnable和Thread的区别
在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口:Thread类是在java.lang包中定义的.一个类只要继承了Thread类同时覆写了本类中的run() ...
- windows7设置开机启动方式
打开计算机(资源管理器)(快捷键win+e),输入 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup 将需要开机启动的软件的快捷 ...
- runtime理论知识
http://southpeak.github.io/2014/10/25/objective-c-runtime-1/ 转载http://www.jianshu.com/p/6b905584f536 ...
- BZOJ 3527: [Zjoi2014]力
Description 求 \(E_i=\sum _{j=0}^{i-1} \frac {q_j} {(i-j)^2}-\sum _{j=i+1}^{n-1} \frac{q_j} {(i-j)^2} ...