且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

leetCode 273. Integer to English Words 字符串 | Hard

更新时间:2022-10-03 13:57:34

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"

题目大意:

将一个数字转换成它的英文读法。

思路:

1.将数字以3位为一组,分组。

2.组合每组的字符串。

3.将每组字符串和自己的单位结合起来。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
class Solution {
public:
 
    string& trim(string &s) //C++ 去字符串两边的空格
    {
        if (s.empty()) 
        {
            return s;
        }
        s.erase(0,s.find_first_not_of(" "));
        s.erase(s.find_last_not_of(" ") + 1);
        return s;
    }
    string numberToWords(int num) {
         
        if(num == 0)
            return "Zero";
        string units_pre20[20] = {"","One","Two","Three","Four","Five",
                "Six","Seven","Eight","Nine","Ten",
                "Eleven","Twelve","Thirteen","Fourteen","Fifteen",
                "Sixteen","Seventeen","Eighteen","Nineteen"};
        string units_10[10] = {"","","Twenty","Thirty","Forty","Fifty",
                      "Sixty","Seventy","Eighty","Ninety"};
 
        string units[4] = {"","Thousand","Million","Billion"};
 
        vector<int > temp;
        int record = num;
         
        string result;
        while(record > 0)//3位分段
        {
            temp.push_back(record % 1000);
            record /= 1000;
        }
         
        for(int i = 0; i < temp.size(); i++)//每段处理
        {
            string tmpStr;
            int slices = temp[i];
            int nHundreds = 0;
            int nTens = 0;
            int nUnits = 0;
            if(slices == 0)
                continue;
            if(slices >= 100)
            {
                nHundreds = slices / 100;
                tmpStr = tmpStr + units_pre20[nHundreds] + " Hundred";
                slices = slices % 100;
            }
             
            if(slices >= 20)
            {
                tmpStr = tmpStr + " " + units_10[slices / 10] ;
                if(slices % 10 != 0)
                {
                    tmpStr = tmpStr + " " + units_pre20[slices % 10];
                }
                 
            }else if(slices < 20 && slices > 0)
            {
                tmpStr = tmpStr + " " + units_pre20[slices];
            }
             
            if(i != 0)
            {
                tmpStr = tmpStr + " " + units[i];
            }
             
            result = tmpStr + " " + result;
            trim(result);
        }
        return result;
    }
};

总结:

熟练度还是低,一个成熟的想法,需要半个多小时去实现。。。

呵呵,好吧,继续练习。



本文转自313119992 51CTO博客,原文链接:http://blog.51cto.com/qiaopeng688/1840376