0273-整数转换英文表示
将非负整数 num
转换为其对应的英文表示。
示例 1:
**输入:** num = 123
**输出:** "One Hundred Twenty Three"
示例 2:
**输入:** num = 12345
**输出:** "Twelve Thousand Three Hundred Forty Five"
示例 3:
**输入:** num = 1234567
**输出:** "One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"
提示:
0 <= num <= 231 - 1
方法一:递归
由于非负整数 $\textit{num}$ 的最大值为 $2^{31}-1$,因此最多有 $10$ 位数。将整数转换成英文表示中,将数字按照 $3$ 位一组划分,将每一组的英文表示拼接之后即可得到整数 $\textit{num}$ 的英文表示。
每一组最多有 $3$ 位数,可以使用递归的方式得到每一组的英文表示。根据数字所在的范围,具体做法如下:
小于 $20$ 的数可以直接得到其英文表示;
大于等于 $20$ 且小于 $100$ 的数首先将十位转换成英文表示,然后对个位递归地转换成英文表示;
大于等于 $100$ 的数首先将百位转换成英文表示,然后对其余部分(十位和个位)递归地转换成英文表示。
从高到低的每一组的单位依次是 $10^9$、$10^6$、$10^3$、$1$,除了最低组以外,每一组都有对应的表示单位的词,分别是 $\text{Billion"}$、$\text{
Million”}$、$\text{``Thousand”}$。
得到每一组的英文表示后,需要对每一组加上对应的表示单位的词,然后拼接得到整数 $\textit{num}$ 的英文表示。
具体实现中需要注意以下两点:
只有非零的组的英文表示才会拼接到整数 $\textit{num}$ 的英文表示中;
如果 $\textit{num} = 0$,则不适用上述做法,而是直接返回 $\text{``Zero”}$。
1 | class Solution { |
1 | public class Solution { |
1 | class Solution { |
1 | var numberToWords = function(num) { |
1 | var ( |
1 | singles = ["", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"] |
复杂度分析
时间复杂度:$O(1)$。非负整数 $\textit{nums}$ 按照 $3$ 位一组划分最多有 $4$ 组,分别得到每一组的英文表示,然后拼接得到整数 $\textit{num}$ 的英文表示,时间复杂度是常数。
空间复杂度:$O(1)$。空间复杂度主要取决于存储英文表示的字符串和递归调用栈,英文表示的长度可以看成常数,递归调用栈不会超过 $3$ 层。
方法二:迭代
也可以使用迭代的方式得到每一组的英文表示。由于每一组最多有 $3$ 位数,因此依次得到百位、十位、个位上的数字,生成该组的英文表示,注意只有非零位才会被添加到英文表示中。
1 | class Solution { |
1 | public class Solution { |
1 | class Solution { |
1 | var numberToWords = function(num) { |
1 | var ( |
1 | singles = ["", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"] |
复杂度分析
时间复杂度:$O(1)$。
空间复杂度:$O(1)$。