[LeetCode 273] Integer to English Word
2015-09-18 07:21
337 查看
Convert a non-negative integer to its english words representation. Given input is guaranteed to be less than 231 - 1.
For example,
Hint:
Did you see a pattern in dividing the number into chunk of words? For example, 123 and 123000.
Group the number by thousands (3 digits). You can write a helper function that takes a number less than 1000 and convert just that chunk to words.
There are many edge cases. What are some good test cases? Does your code work with input such as 0? Or 1000010? (middle chunk is zero and should not be printed out)
solution:
Just as hint described, handle 3digit at each time, convert them into English word,
every time handle 3 digit, the unit will increase.
So many corner cases need to handle.
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"
Hint:
Did you see a pattern in dividing the number into chunk of words? For example, 123 and 123000.
Group the number by thousands (3 digits). You can write a helper function that takes a number less than 1000 and convert just that chunk to words.
There are many edge cases. What are some good test cases? Does your code work with input such as 0? Or 1000010? (middle chunk is zero and should not be printed out)
solution:
Just as hint described, handle 3digit at each time, convert them into English word,
every time handle 3 digit, the unit will increase.
So many corner cases need to handle.
public String numberToWords(int num) { String[] units = {""," Thousand"," Million"," Billion"}; int i = 0; String res=""; while(num>0) { int temp = num%1000; if(temp>0) res = convert(temp) + units[i] + (res.length()==0 ?"": " "+res); num /= 1000; i++; } return res.isEmpty()? "Zero" : res; } public String convert(int num){ String res = ""; String[] ten = {"Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"}; String[] hundred = {"Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"}; String[] twenty = {"Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"}; if(num>0) { int temp = num/100; if(temp>0) { res += ten[temp] + " Hundred"; } temp = num%100; if(temp>=10 && temp<20){ if(!res.isEmpty()) res +=" "; res = res + twenty[temp%10]; return res; }else if(temp>=20){ temp = temp/10; if(!res.isEmpty()) res +=" "; res = res + hundred[temp-1]; } temp = num%10; if(temp>0) { if(!res.isEmpty()) res +=" "; res = res + ten[temp]; } } return res; }
相关文章推荐
- C++Primer第五版 9.3.2节练习
- Linux-Ubuntu下录制 和 制作 Gif 图片
- OSChina 周五乱弹 —— 人生三大错觉
- 关于Thinkphp里面的$this->display();的解说及说明
- Lambda表达式二
- Android酷炫实用的开源框架(UI框架)
- UVa 10892 - LCM Cardinality
- poj 2942 Knights of the Round Table 边连通分量+染色法
- poj 2942 Knights of the Round Table 边连通分量+染色法
- 【OpenGL】Shader技巧集合
- Mac 终端里神秘的 bogon 及解决方法
- 【NPR】非真实感渲染实验室
- 【ShaderToy】水彩画
- 【ShaderToy】跳动的心
- *LeetCode-Generate Parentheses
- 【ShaderToy】基础篇之再谈抗锯齿(antialiasing,AA)
- 【ShaderToy】开篇
- 【Linux探索之旅】第三部分第四课:后台运行及合并多个终端
- 【ShaderToy】基础篇之谈谈点、线的绘制
- ShaderToy Seascape