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

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

时间: 2024-12-15 07:13:47

leetCode 273. Integer to English Words 字符串 | Hard的相关文章

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 -&g

[LeetCode 273] Integer to English Word

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 -&g

[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. Example 1: Input: 123Output: "One Hundred Twenty Three"Example 2: Input: 12345Output: "Twelve Thousand Three Hundred Fort

LeetCode:Integer to English Words - 按英语读法输出数字对应单词

1.题目名称 Integer to English Words(按英语读法输出数字对应单词) 2.题目地址 https://leetcode.com/problems/integer-to-english-words/ 3.题目内容 英文:Convert a non-negative integer to its english words representation. Given input is guaranteed to be less than 231 - 1. 中文:给出一个非负整数

12. Integer to Roman &amp;&amp; 13. Roman to Integer &amp;&amp; 273. Integer to English Words

12. Integer to Roman Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999. Hide Tags Math String Hide Similar Problems (E) Roman to Integer (H) Integer to English Words public class Solution { pub

leetcode-【hard】273. Integer to English Words

题目: 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 Hu

273. Integer to English Words

// 看看人家的转换int为String吧,真的很不错啊!主要是在1000以内的数自由转换的时候我没做好 private static final String[] lessThan20 = { "", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight",

【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. Example 1: Input: 123 Output: "One Hundred Twenty Three" Example 2: Input: 12345 Output: "Twelve Thousand Three Hun

[email&#160;protected] [273] Integer to English Words (String &amp; Math)

https://leetcode.com/problems/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 -> "Tw