1
1
H
2
- 1525229518
3
- tags : Math , String
2
+ 1533443082
3
+ tags : Math , String , Enumeration
4
4
5
5
给一个小于 Integer .MAX_VALUE (2 ^31 - 1 ) 的数字 , 转换成英语 . (不需要加 'and' )
6
6
7
7
#### String
8
8
- 基本implementation
9
- - 分类讨论 : thounsand , million , billion . 3 个数字一格 .
9
+ - ` 分类讨论 ` : thounsand , million , billion . ` 3 个数字一格 ` .
10
10
- 用array枚举 token
11
11
- 运用 % 和 / 来找到每个分段的英语翻译
12
12
- 3 -digit 的部分 , 可以用一个helper funtion来找到结果 , 每段的处理方法都是一样的
13
13
14
14
#### 注意
15
- - StringBuffer 更有效率
16
- - 注意加 " " 的时候, 如果多余, 要trim()
15
+ - StringBuffer 更有效率 ! ` sb . insert ( 0 , xxx )` append在sb前面
16
+ - 注意加 " " 的时候, 如果多余, 要`trim()`
17
17
- 注意, 小于20的数字, 有自己的特殊写法, 需要额外handle
18
- - 这道题目就是要细致耐心, 算法并不难 , 就是想要写的efficient并且正确, 需要很小心
18
+ - 这道题目就是要细致`耐心`, 几乎么有什么算法 , 就是想要写的efficient并且正确, 需要很小心
19
19
20
20
21
21
```
@@ -49,24 +49,16 @@ class Solution {
49
49
public String[] v1 = {" ", " One ", "Two" , "Three" , "Four" , "Five" , "Six" , "Seven" , "Eight" , "Nine" , "Ten" , "Eleven" , "Twelve" , "Thirteen" , "Fourteen" , "Fifteen" , "Sixteen" , "Seventeen" , "Eighteen" , "Nineteen" };
50
50
public String [] v2 = {"" , "" , "Twenty" , "Thirty" , "Forty" , "Fifty" , "Sixty" , "Seventy" , "Eighty" , "Ninety" };
51
51
public String [] v3 = {"" , "Thousand " , "Million " , "Billion " };
52
-
53
52
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" ;
60
55
61
56
StringBuffer sb = new StringBuffer ();
62
57
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] = "";
67
60
sb .insert (0 , calcPartialNumber (partial ) + " " + v3 [i ]);
68
61
}
69
- // Shrink by 1000
70
62
num /= 1000 ;
71
63
}
72
64
@@ -75,14 +67,12 @@ public String numberToWords(int num) {
75
67
76
68
private String calcPartialNumber (int num ) {
77
69
StringBuffer sb = new StringBuffer ();
78
- // Handle 100's
79
70
if (num >= 100 ) {
80
71
int hund = num / 100 ;
81
72
sb .append (v1 [hund ] + " Hundred " );
82
73
num = num % 100 ;
83
74
}
84
75
85
- // Calculate number < 100
86
76
if (num < 20 ) {
87
77
sb .append (v1 [num ] + " " );
88
78
} else {
@@ -173,4 +163,4 @@ public String helper(int num, int i) {
173
163
return str ;
174
164
}
175
165
}
176
- ```
166
+ ```
0 commit comments