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之路的主要内容,如果未能解决你的问题,请参考以下文章

273. 整数转换英文表示(模拟&递归)

LeetCode 273. 整数转换英文表示 / 29. 两数相除 / 412. Fizz Buzz

[LeetCode] 273. Integer to English Words

LeetCode刷题273-困难-整数转换成英文

273 Integer to English Words 整数转换英文表示

2022-01-09:整数转换英文表示。将非负整数 num 转换为其对应的英文表示。 示例 1: 输入:num = 123, 输出:“One Hundred Twenty Three“。 力扣273。