Skip to content

Commit 7cc55e6

Browse files
committed
feat: add solutions to lc problem: No.0273.Integer to English Words
1 parent e726b2e commit 7cc55e6

File tree

3 files changed

+486
-1
lines changed

3 files changed

+486
-1
lines changed

solution/0200-0299/0273.Integer to English Words/README.md

Lines changed: 228 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,15 +58,242 @@
5858
<!-- 这里可写当前语言的特殊实现逻辑 -->
5959

6060
```python
61-
61+
class Solution:
62+
def numberToWords(self, num: int) -> str:
63+
if num == 0:
64+
return 'Zero'
65+
66+
lt20 = ['', 'One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten', 'Eleven', 'Twelve', 'Thirteen', 'Fourteen', 'Fifteen', 'Sixteen', 'Seventeen', 'Eighteen', 'Nineteen']
67+
tens = ['', 'Ten', 'Twenty', 'Thirty', 'Forty', 'Fifty', 'Sixty', 'Seventy', 'Eighty', 'Ninety']
68+
thousands = ['Billion', 'Million', 'Thousand', '']
69+
70+
def transfer(num):
71+
if num == 0:
72+
return ''
73+
if num < 20:
74+
return lt20[num] + ' '
75+
if num < 100:
76+
return tens[num // 10] + ' ' + transfer(num % 10)
77+
return lt20[num // 100] + ' Hundred ' + transfer(num % 100)
78+
79+
res = []
80+
i, j = 1000000000, 0
81+
while i > 0:
82+
if num // i != 0:
83+
res.append(transfer(num // i))
84+
res.append(thousands[j])
85+
res.append(' ')
86+
num %= i
87+
j += 1
88+
i //= 1000
89+
return ''.join(res).strip()
6290
```
6391

6492
### **Java**
6593

6694
<!-- 这里可写当前语言的特殊实现逻辑 -->
6795

6896
```java
97+
class Solution {
98+
private static Map<Integer, String> map;
99+
100+
static {
101+
map = new HashMap<>();
102+
map.put(1, "One");
103+
map.put(2, "Two");
104+
map.put(3, "Three");
105+
map.put(4, "Four");
106+
map.put(5, "Five");
107+
map.put(6, "Six");
108+
map.put(7, "Seven");
109+
map.put(8, "Eight");
110+
map.put(9, "Nine");
111+
map.put(10, "Ten");
112+
map.put(11, "Eleven");
113+
map.put(12, "Twelve");
114+
map.put(13, "Thirteen");
115+
map.put(14, "Fourteen");
116+
map.put(15, "Fifteen");
117+
map.put(16, "Sixteen");
118+
map.put(17, "Seventeen");
119+
map.put(18, "Eighteen");
120+
map.put(19, "Nineteen");
121+
map.put(20, "Twenty");
122+
map.put(30, "Thirty");
123+
map.put(40, "Forty");
124+
map.put(50, "Fifty");
125+
map.put(60, "Sixty");
126+
map.put(70, "Seventy");
127+
map.put(80, "Eighty");
128+
map.put(90, "Ninety");
129+
map.put(100, "Hundred");
130+
map.put(1000, "Thousand");
131+
map.put(1000000, "Million");
132+
map.put(1000000000, "Billion");
133+
}
134+
135+
public String numberToWords(int num) {
136+
if (num == 0) {
137+
return "Zero";
138+
}
139+
StringBuilder sb = new StringBuilder();
140+
for (int i = 1000000000; i >= 1000; i /= 1000) {
141+
if (num >= i) {
142+
sb.append(get3Digits(num / i)).append(' ').append(map.get(i));
143+
num %= i;
144+
}
145+
}
146+
if (num > 0) {
147+
sb.append(get3Digits(num));
148+
}
149+
return sb.substring(1);
150+
}
151+
152+
private String get3Digits(int num) {
153+
StringBuilder sb = new StringBuilder();
154+
if (num >= 100) {
155+
sb.append(' ').append(map.get(num / 100)).append(' ').append(map.get(100));
156+
num %= 100;
157+
}
158+
if (num > 0) {
159+
if (num < 20 || num % 10 == 0) {
160+
sb.append(' ').append(map.get(num));
161+
} else {
162+
sb.append(' ').append(map.get(num / 10 * 10)).append(' ').append(map.get(num % 10));
163+
}
164+
}
165+
return sb.toString();
166+
}
167+
}
168+
```
169+
170+
```java
171+
class Solution {
172+
private String[] lt20 = {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"};
173+
private String[] tens = {"", "Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"};
174+
private String[] thousands = {"Billion", "Million", "Thousand", ""};
175+
176+
public String numberToWords(int num) {
177+
if (num == 0) {
178+
return "Zero";
179+
}
180+
StringBuilder sb = new StringBuilder();
181+
for (int i = 1000000000, j = 0; i > 0; i /= 1000, ++j) {
182+
if (num / i == 0) {
183+
continue;
184+
}
185+
sb.append(transfer(num / i)).append(thousands[j]).append(' ');
186+
num %= i;
187+
}
188+
return sb.toString().trim();
189+
}
190+
191+
private String transfer(int num) {
192+
if (num == 0) {
193+
return "";
194+
}
195+
if (num < 20) {
196+
return lt20[num] + " ";
197+
}
198+
if (num < 100) {
199+
return tens[num / 10] + " " + transfer(num % 10);
200+
}
201+
return lt20[num / 100] + " Hundred " + transfer(num % 100);
202+
}
203+
}
204+
```
69205

206+
### **C#**
207+
208+
```cs
209+
using System.Collections.Generic;
210+
using System.Linq;
211+
212+
public class Solution {
213+
private string[] bases = { "Thousand", "Million", "Billion" };
214+
public string NumberToWords(int num) {
215+
if (num == 0)
216+
{
217+
return "Zero";
218+
}
219+
var baseIndex = -1;
220+
var parts = new List<string>();
221+
while (num > 0)
222+
{
223+
var part = NumberToWordsInternal(num % 1000);
224+
if (part.Length > 0 && baseIndex >= 0)
225+
{
226+
part = JoinParts(part, bases[baseIndex]);
227+
}
228+
parts.Add(part);
229+
baseIndex++;
230+
num /= 1000;
231+
}
232+
parts.Reverse();
233+
return JoinParts(parts);
234+
}
235+
236+
private string JoinParts(IEnumerable<string> parts)
237+
{
238+
return string.Join(" ", parts.Where(p => p.Length > 0));
239+
}
240+
241+
private string JoinParts(params string[] parts)
242+
{
243+
return JoinParts((IEnumerable<string>)parts);
244+
}
245+
246+
private string NumberToWordsInternal(int num)
247+
{
248+
switch(num)
249+
{
250+
case 0: return "";
251+
case 1: return "One";
252+
case 2: return "Two";
253+
case 3: return "Three";
254+
case 4: return "Four";
255+
case 5: return "Five";
256+
case 6: return "Six";
257+
case 7: return "Seven";
258+
case 8: return "Eight";
259+
case 9: return "Nine";
260+
case 10: return "Ten";
261+
case 11: return "Eleven";
262+
case 12: return "Twelve";
263+
case 13: return "Thirteen";
264+
case 14: return "Fourteen";
265+
case 15: return "Fifteen";
266+
case 16: return "Sixteen";
267+
case 17: return "Seventeen";
268+
case 18: return "Eighteen";
269+
case 19: return "Nineteen";
270+
}
271+
272+
if (num < 100)
273+
{
274+
string part1;
275+
switch (num/10)
276+
{
277+
case 2: part1 = "Twenty"; break;
278+
case 3: part1 = "Thirty"; break;
279+
case 4: part1 = "Forty"; break;
280+
case 5: part1 = "Fifty"; break;
281+
case 6: part1 = "Sixty"; break;
282+
case 7: part1 = "Seventy"; break;
283+
case 8: part1 = "Eighty"; break;
284+
case 9: default: part1 = "Ninety"; break;
285+
}
286+
var part2 = NumberToWordsInternal(num % 10);
287+
return JoinParts(part1, part2);
288+
}
289+
290+
{
291+
var part1 = NumberToWordsInternal(num / 100);
292+
var part2 = NumberToWordsInternal(num % 100);
293+
return JoinParts(part1, "Hundred", part2);
294+
}
295+
}
296+
}
70297
```
71298

72299
### **...**

0 commit comments

Comments
 (0)