leetcode 273. Integer to English Words

本文介绍了一种将非负整数转换为其英文单词表示的方法。通过逆向处理每三位数字并附加对应的英文后缀(如Thousand、Million等),实现了整数到英文的准确转换。文章详细解释了实现思路及代码实现。

273. Integer to English Words

Convert a non-negative integer to its english words representation. Given input is guaranteed to be less than 231 - 1.

For example,

123 -> "One Hundred Twenty Three"
12345 -> "Twelve Thousand Three Hundred Forty Five"
1234567 -> "One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"

这个题情况比较多。所有细节都要满足。

思路就是 从后往前每3位一起得到一个string。然后加上后缀(Thousand,million等)拼接。


class Solution {
public:
    string numberToWords(int num) 
    {
        string Snum = to_string(num);
        string ret = "";
        int k = 0;
        vector<string> kk;
        kk.push_back("");
        kk.push_back(" Thousand");
        kk.push_back(" Million");
        kk.push_back(" Billion");
        
        while ( 1 )
        {
            if (Snum.size() <= 3)
            {
                ret = helper(Snum) + kk[k] + ret;
                if (ret == "")
                    return "Zero";
                if (ret[0] == ' ')
                    return ret.substr(1, ret.size() - 1);
            }
            else
            {
                string helper_ret = helper(Snum.substr(Snum.size() - 3, 3));
                if (helper_ret != "")
                    ret = helper_ret + kk[k] + ret;
                Snum = Snum.substr(0, Snum.size() - 3);
            }
            k++;
        }
    }
    
    string helper(string s)
    {
        map<int, string> mp;
        mp[1] = "One";
        mp[2] = "Two";
        mp[3] = "Three";
        mp[4] = "Four";
        mp[5] = "Five";
        mp[6] = "Six";
        mp[7] = "Seven";
        mp[8] = "Eight";
        mp[9] = "Nine";
        mp[10] = "Ten";
        mp[11] = "Eleven";
        mp[12] = "Twelve";
        mp[13] = "Thirteen";
        mp[14] = "Fourteen";
        mp[15] = "Fifteen";
        mp[16] = "Sixteen";
        mp[17] = "Seventeen";
        mp[18] = "Eighteen";
        mp[19] = "Nineteen";
        mp[20] = "Twenty";
        mp[30] = "Thirty";
        mp[40] = "Forty";
        mp[50] = "Fifty";
        mp[60] = "Sixty";
        mp[70] = "Seventy";
        mp[80] = "Eighty";
        mp[90] = "Ninety";
            
        int is = to_int(s);
        if (is == 0)
            return "";
        
        if (mp.find(is) != mp.end())
        {
            return " " + mp[is];
        }
        else if (is < 100) //可能是099进来 得转换为99
        {
            s = to_string(is);
            return " " + mp[to_int(s.substr(0, 1)) * 10] + " " + mp[to_int(s.substr(1, 1))];
        }
        else  //3位
        {
            return " " + mp[to_int(s.substr(0, 1))] + " Hundred" + helper(s.substr(1, 2));       
        }
    }
private:   
    int to_int(string s)
    {
        stringstream ss;  
        ss<<s;  
        int i;  
        ss>>i;  
        return i;
    }
};






评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值