【LeetCode】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"

Show Hint 

    • Difficulty: Hard
     先把数字分割成4个三分位处理。前3个三分位分别加上Billion,Million,Thousand。
    三分位处理函数为Helper()
    class Solution {
    public:
        string Helper(string numStr, string dict1[], string dict2[], string dict3[])
        {
            int num = atoi(numStr.c_str());
            if(num == 0)
                return "";
            else
            {
                string ret = "";
                int hundred = numStr[0] - '0';
                int ten = numStr[1] - '0';
                int one = numStr[2] - '0';
                
                if(hundred != 0)
                    ret += dict1[hundred-1] + " Hundred";
    
                if(ten == 0)
                {
                    if(one == 0)
                        return ret;
                    else
                        return (ret=="")?(dict1[one-1]):(ret+" "+dict1[one-1]); 
                }
                else if(ten == 1)
                {
                    return (ret=="")?(dict2[one]):(ret+" "+dict2[one]); 
                }
                else
                {
                    if(one == 0)
                        return (ret=="")?(dict3[ten-2]):(ret+" "+dict3[ten-2]);
                    else
                        return (ret=="")?(dict3[ten-2]+" "+dict1[one-1]):(ret+" "+dict3[ten-2]+" "+dict1[one-1]);
                }
            }
        }
        string numberToWords(int num) {
            if(num == 0)
                return "Zero";
            else
            {
                string ret = "";
                string dict1[9] = {"One","Two","Three","Four","Five","Six","Seven","Eight","Nine"};
                string dict2[10] = {"Ten","Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen","Seventeen",
                                "Eighteen","Nineteen"};
                string dict3[8] = {"Twenty","Thirty","Forty","Fifty","Sixty","Seventy","Eighty","Ninety"};
    
                string numStr = to_string(num);
                int len = numStr.size();
                string padding = string(12-len, '0');
                numStr = padding + numStr;
    
                string billionStr = Helper(numStr.substr(0,3), dict1, dict2, dict3);
                if(billionStr != "")
                    ret += billionStr + " Billion";
    
                string millionStr = Helper(numStr.substr(3,3), dict1, dict2, dict3);
                if(millionStr != "")
                    ret += (ret=="")?(millionStr+" Million"):(" "+millionStr+" Million");
    
                string thousandStr = Helper(numStr.substr(6,3), dict1, dict2, dict3);
                if(thousandStr != "")
                    ret += (ret=="")?(thousandStr+" Thousand"):(" "+thousandStr+" Thousand");
    
                string oneStr = Helper(numStr.substr(9,3), dict1, dict2, dict3);
                if(oneStr != "")
                    ret += (ret=="")?(oneStr):(" "+oneStr);
                return ret;
            }
        }
    };



    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值