11H
2- 1525229518
3- tags : Math , String
2+ 1533443082
3+ tags : Math , String , Enumeration
44
55给一个小于 Integer .MAX_VALUE (2 ^31 - 1 ) 的数字 , 转换成英语 . (不需要加 'and' )
66
77#### String
88- 基本implementation
9- - 分类讨论 : thounsand , million , billion . 3 个数字一格 .
9+ - ` 分类讨论 ` : thounsand , million , billion . ` 3 个数字一格 ` .
1010- 用array枚举 token
1111- 运用 % 和 / 来找到每个分段的英语翻译
1212- 3 -digit 的部分 , 可以用一个helper funtion来找到结果 , 每段的处理方法都是一样的
1313
1414#### 注意
15- - StringBuffer 更有效率
16- - 注意加 " " 的时候, 如果多余, 要trim()
15+ - StringBuffer 更有效率 ! ` sb . insert ( 0 , xxx )` append在sb前面
16+ - 注意加 " " 的时候, 如果多余, 要`trim()`
1717- 注意, 小于20的数字, 有自己的特殊写法, 需要额外handle
18- - 这道题目就是要细致耐心, 算法并不难 , 就是想要写的efficient并且正确, 需要很小心
18+ - 这道题目就是要细致`耐心`, 几乎么有什么算法 , 就是想要写的efficient并且正确, 需要很小心
1919
2020
2121```
@@ -49,24 +49,16 @@ class Solution {
4949 public String[] v1 = {" ", " One ", "Two" , "Three" , "Four" , "Five" , "Six" , "Seven" , "Eight" , "Nine" , "Ten" , "Eleven" , "Twelve" , "Thirteen" , "Fourteen" , "Fifteen" , "Sixteen" , "Seventeen" , "Eighteen" , "Nineteen" };
5050 public String [] v2 = {"" , "" , "Twenty" , "Thirty" , "Forty" , "Fifty" , "Sixty" , "Seventy" , "Eighty" , "Ninety" };
5151 public String [] v3 = {"" , "Thousand " , "Million " , "Billion " };
52-
5352 public String numberToWords (int num ) {
54- if (num < 0 ) {
55- return "" ;
56- }
57- if (num == 0 ) {
58- return "Zero" ;
59- }
53+ if (num < 0 ) return "" ;
54+ if (num == 0 ) return "Zero" ;
6055
6156 StringBuffer sb = new StringBuffer ();
6257 for (int i = 0 ; i < 4 ; i ++) {
63- // Obtain smaller number, handle Thousand, Million, Billion
64- int partial = num - (num / 1000 ) * 1000 ;
65- if (partial > 0 ) {
66- // Append suffix depending on i:
58+ int partial = num % 1000 ; // Obtain smaller 3-digit section
59+ if (partial > 0 ) { // Append suffix depending on i, where v3[0] = "";
6760 sb .insert (0 , calcPartialNumber (partial ) + " " + v3 [i ]);
6861 }
69- // Shrink by 1000
7062 num /= 1000 ;
7163 }
7264
@@ -75,14 +67,12 @@ public String numberToWords(int num) {
7567
7668 private String calcPartialNumber (int num ) {
7769 StringBuffer sb = new StringBuffer ();
78- // Handle 100's
7970 if (num >= 100 ) {
8071 int hund = num / 100 ;
8172 sb .append (v1 [hund ] + " Hundred " );
8273 num = num % 100 ;
8374 }
8475
85- // Calculate number < 100
8676 if (num < 20 ) {
8777 sb .append (v1 [num ] + " " );
8878 } else {
@@ -173,4 +163,4 @@ public String helper(int num, int i) {
173163 return str ;
174164 }
175165}
176- ```
166+ ```
0 commit comments