273. 整数转换英文表示

题目:

将非负整数转换为其对应的英文表示。可以保证给定输入小于 231 - 1 。

示例 1:

输入: 123
输出: "One Hundred Twenty Three"

示例 2:

输入: 12345
输出: "Twelve Thousand Three Hundred Forty Five"

示例 3:

输入: 1234567
输出: "One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"

示例 4:

输入: 1234567891
输出: "One Billion Two Hundred Thirty Four Million Five Hundred Sixty Seven Thousand Eight Hundred Ninety One"

 思路:

英文的数字统计是以1000为单位的,所以按千为单位进行处理即可,其中11-19为特殊数字需要特殊处理

    def numberToWords(self, num: int) -> str:
        w3 = [" Thousand"," Million"," Billion"]
        w2 = [" Twenty"," Thirty"," Forty"," Fifty"," Sixty"," Seventy"," Eighty"," Ninety"]
        w1 = [" One"," Two"," Three"," Four"," Five"," Six"," Seven"," Eight"," Nine"," Ten"," Eleven"," Twelve"," Thirteen"," Fourteen"," Fifteen"," Sixteen"," Seventeen"," Eighteen"," Nineteen"]
        if num == 0:
            return "Zero"
        n = ''
        i = 0
        while num :
            j = ''
            k = num % 1000
            num = num // 1000
            if num % 1000 :
                j = w3[i]
            
            if k // 100 :
                j += w1[k//100-1] + " Hundred"
                k = k % 100
            if k > 19 :
                j += w2[k//10-2]
                k = k % 10
            if k:
                j += w1[k-1]
                
            i += 1
            n = j + n
        return n.strip()

 另一个思路,使用递归,感谢leetcode评论中的提供者

  def numberToWords(self, num):
        """
        :type num: int
        :rtype: str
        """
        d1=['','One','Two','Three','Four','Five','Six','Seven','Eight','Nine','Ten','Eleven','Twelve','Thirteen','Fourteen','Fifteen','Sixteen','Seventeen','Eighteen','Nineteen','Twenty']
        d2=['','Ten','Twenty','Thirty','Forty','Fifty','Sixty','Seventy','Eighty','Ninety']
        if num==0:return 'Zero'
        if num<=20:return d1[num]
        if num<100:
        	t,d=num//10,num%10
        	return d2[t]+' '+d1[d] if d>0 else d2[t]

        if num<1000:
        	h=num//100
        	if num%100==0:return d1[h]+' Hundred'
        	return d1[h]+' Hundred '+self.numberToWords(num%100)
        
        if num<10**6:
        	th=num//10**3
	        if num%10**3==0:
	        	return self.numberToWords(th)+' Thousand'	                	
        	return self.numberToWords(th)+' Thousand '+self.numberToWords(num%10**3)

        if num<10**9:
        	mi=num//10**6
	        if num%10**6==0:
	        	return self.numberToWords(mi)+' Million'        	                	
        	return self.numberToWords(mi)+' Million '+self.numberToWords(num%10**6)

        if num<10**12:
        	bi=num//10**9
	        if num%10**9==0:
	        	return d1[num//10**9]+' Billion'                        	

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值