码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-08-19 22:27:55      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:字符串

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!