[leetcode] Integer to English Words

来源:互联网 发布:怎么用阿里云 caffe 编辑:程序博客网 时间:2024/05/16 12:18

1道模拟题花了2个多小时,我也是醉了。一方面由于好久没有刷题了,一方面这道题乱七八糟的细节特别多。于是就想简单总结下。

题意:

将整型数字(231-1以内)转化成英文单词,如:


思路很普通:

2^31 = 2 147 483 648,

我们可以将数字转化成字符串后,每3个字符分为1组,整体字符串无非就是每组数字构成的串+“Billion/Million/Thousand”之类;可以自定义一个子函数来求3位以内的数的英文表示,这里需要提前将0-9、10-19、20、30、40、...、90之类的英文表示存入数组中,以便利用下标来访问,有点儿哈希的意思。

考虑到python的灵便性,于是便用python来编码了;由于两个单词之间用空格“ ”连接,而用字符串时不太好控制何时加空格,何时不加,例如1001,我一开始用字符串时就搞成了one-thousand--one(且用‘-’表示空格);其实可以先用list来存储每个单词,最后再用空格将它们连接起来就好了。

详细代码如下:

class Solution(object):    def num2str(self,snum):            hsh = ("Zero","One","Two", "Three", "Four", "Five", "Six", "Seven", "Eight","Nine")        hsh1 = ("Ten","Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen","Seventeen","Eighteen","Nineteen")        hsh2 = ("","","Twenty", "Thirty","Forty","Fifty","Sixty","Seventy","Eighty","Ninety")        sstr = []        lenth = len(snum)        if lenth == 3:            if(int(snum[0]))>0:                sstr.extend([hsh[int(snum[0])],"Hundred"])            if int(snum[1])>1:                sstr.append(hsh2[int(snum[1])])                if int(snum[2])>0:                    sstr.append(hsh[int(snum[2])])            elif int(snum[1])==1:                sstr.append(hsh1[int(snum[2])])            else:                if (int(snum[2])>0):                    sstr.append(hsh[int(snum[2])])        elif lenth == 2:            if int(snum[0])>1:                sstr.append(hsh2[int(snum[0])])                if int(snum[1])>0:                    sstr.append(hsh[int(snum[1])])            elif int(snum[0])==1:                sstr.append(hsh1[int(snum[1])])        elif lenth == 1:            sstr.append(hsh[int(snum[0])])        return (' ').join(sstr)            def numberToWords(self, num):        """        :type num: int        :rtype: str        """        tbl = (""," Thousand "," Million "," Billion ")        numstr = str(num)        sstr = ""        lenth = len(numstr)        while lenth > 0:            mod = lenth % 3            if mod == 0:                mod = 3            if len(self.num2str(numstr[0:mod]))>0:                sstr += self.num2str(numstr[0:mod])                sstr += tbl[(lenth-1) / 3]            numstr = numstr[mod:]            lenth = len(numstr)        if(sstr[-1]==' '):            sstr = sstr[0:-1]        return sstr        

0 0
原创粉丝点击