标签:字符串
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.将每组字符串和自己的单位结合起来。
代码如下:
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;
    }
};总结:
熟练度还是低,一个成熟的想法,需要半个多小时去实现。。。
呵呵,好吧,继续练习。
2016-08-19 17:38:50
本文出自 “做最好的自己” 博客,请务必保留此出处http://qiaopeng688.blog.51cto.com/3572484/1840376
leetCode 273. Integer to English Words 字符串 | Hard
标签:字符串
原文地址:http://qiaopeng688.blog.51cto.com/3572484/1840376