LeetCode 273 整数转换英文表示[模拟 字符串] HERODING的LeetCode之路
Posted HERODING23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 273 整数转换英文表示[模拟 字符串] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。
解题思路:
一道比较复杂的模拟题,其实仔细分析可以发现,本质就是四个区间,billion,million,thousand,以及百位数以内,每三位算一个区间,所以只要每三位每三位处理即可,递归的地方在于百位数的处理,要分类讨论,代码如下:
class Solution {
private:
string bits[10] = {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};
string tens20[10] = {"Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"};
string tens[11] = {"", "Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"};
string thousands[4] = {"", "Thousand", "Million", "Billion"};
public:
string numberToWords(int num) {
if(num == 0) {
return "Zero";
}
string ans;
// 每三位作为一个区间合成字符串
for(int i = 3, mult = 1000000000; i >= 0; i --, mult /= 1000) {
// 获得第i个区间的三位数
int temp = num / mult;
if(temp > 0) {
num -= temp * mult;
string res;
// 转换为字符串
exchange(res, temp);
res = res + thousands[i] + " ";
ans += res;
}
}
// 去除字符串末尾的空格
while(ans.back() == ' ') {
ans.pop_back();
}
return ans;
}
void exchange(string& res, int temp) {
// 如果是0
if(temp == 0) {
return;
} else if(temp < 10) {
// 如果是小于10
res += bits[temp] + " ";
} else if(temp < 20) {
// 如果小于20
res += tens20[temp - 10] + " ";
} else if(temp < 100) {
// 如果小于100,递归
res += tens[temp / 10] + " ";
exchange(res, temp % 10);
} else {
// 大于100,取百位,递归
res += bits[temp / 100] + " Hundred ";
exchange(res, temp % 100);
}
}
};
以上是关于LeetCode 273 整数转换英文表示[模拟 字符串] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 273. 整数转换英文表示 / 29. 两数相除 / 412. Fizz Buzz
[LeetCode] 273. Integer to English Words
273 Integer to English Words 整数转换英文表示
2022-01-09:整数转换英文表示。将非负整数 num 转换为其对应的英文表示。 示例 1: 输入:num = 123, 输出:“One Hundred Twenty Three“。 力扣273。