[leetcode] Integer to English Words

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值