Integer to English Words LeetCode solution in JavaScript

1
let numberMap = {
2
0: "Zero",
3
100: "Hundred",
4
1: "One",
5
2: "Two",
6
3: "Three",
7
4: "Four",
8
5: "Five",
9
6: "Six",
10
7: "Seven",
11
8: "Eight",
12
9: "Nine",
13
10: "Ten",
14
11: "Eleven",
15
12: "Twelve",
16
13: "Thirteen",
17
14: "Fourteen",
18
15: "Fifteen",
19
16: "Sixteen",
20
17: "Seventeen",
21
18: "Eighteen",
22
19: "Nineteen",
23
20: "Twenty",
24
30: "Thirty",
25
40: "Forty",
26
50: "Fifty",
27
60: "Sixty",
28
70: "Seventy",
29
80: "Eighty",
30
90: "Ninety",
31
};
32

33
let bigNumberMap = {
34
1000000000: "Billion",
35
1000000: "Million",
36
1000: "Thousand",
37
1: "One",
38
};
39

40
let bases = [];
41

42
for (let base in numberMap) {
43
bases.push(parseInt(base, 10));
44
}
45
bases = bases.sort((a, b) => b - a);
46

47
let bigBases = [];
48
for (let base in bigNumberMap) {
49
bigBases.push(parseInt(base, 10));
50
}
51
bigBases = bigBases.sort((a, b) => b - a);
52

53
var numberToWords = function (num) {
54
let res = "";
55
if (num === 0) return numberMap[num];
56
bigBases.forEach((base) => {
57
base = parseInt(base, 10);
58
let baseAsString = base + "";
59
let nums = (num / base) << 0;
60
let remainder = num - nums * base;
61
if (nums >= 1) {
62
[res, nums] = getForHundredBase(res, nums);
63
res += baseAsString.length > 1 ? " " + bigNumberMap[base + ""] : "";
64
num = remainder;
65
}
66
});
67
return res;
68
};
69

70
function getForHundredBase(res, num) {
71
bases.forEach((base) => {
72
base = parseInt(base, 10);
73
[num, res] = getNums(num, base, res);
74
});
75
return [res, num];
76
}
77

78
function getNums(num, base, res) {
79
let nums = (num / base) << 0;
80
let baseAsString = base + "";
81
if (nums > 1 || (nums == 1 && baseAsString.length > 2)) {
82
res += res === "" ? res : " ";
83
res += numberMap[nums] + " " + numberMap[baseAsString];
84
} else if (nums == 1) {
85
res += res === "" ? res : " ";
86
res += numberMap[baseAsString];
87
}
88
return [num - nums * base, res];
89
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0