比亚迪员工爆料:离职后再想回去,基本没戏了,hr明确表示,“拒绝二进宫!”除非领导特批。。
算法题:整数转换英文表示
问题分析
123,它的英文表示就是 "One Hundred Twenty Three",如果是 1000,英文就变成了 "One Thousand"。当然,问题难度会随数字的增大而增加。比如更大的数 12345,它应该被转换为 "Twelve Thousand Three Hundred Forty Five"。思路分析
1到19的数字有独立的英文单词,像 1 -> "One",13 -> "Thirteen",这些可以直接查表。20到99之间的数字有一个十位单位的前缀,像 21 -> "Twenty One",56 -> "Fifty Six",可以拆解为十位和个位。100、1000、10000等更高的单位就比较规律了,分别是 Hundred,Thousand,Million等。
代码实现
numberToWords,并准备一个辅助的数字词典。class Solution:
def numberToWords(self, num: int) -> str:
if num == 0:
return "Zero"# 数字词典
less_than_20 = ["", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten",
"Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen"]
tens = ["", "", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety"]
thousands = ["", "Thousand", "Million", "Billion"]def helper(n):
# 递归处理每个三位数
if n == 0:
return ""
elif n < 20:
return less_than_20[n]
elif n < 100:
return tens[n // 10] + (" " + less_than_20[n % 10] if n % 10 != 0 else "")
else:
return less_than_20[n // 100] + " Hundred" + (" " + helper(n % 100) if n % 100 != 0 else "")res = ""
i = 0
while num > 0:
if num % 1000 != 0:
res = helper(num % 1000) + " " + thousands[i] + " " + res
num //= 1000
i += 1return res.strip()
# 测试
sol = Solution()
print(sol.numberToWords(12345)) # Output: "Twelve Thousand Three Hundred Forty Five"
代码解释
辅助数组:
less_than_20是1到19的数字英文表示。tens是20到90的倍数,方便我们表示两位数的十位。thousands用于表示每三位数的单位(千、百万、十亿等)。
helper 函数:这个递归函数负责处理三位数以内的数字。通过递归调用它,我们可以将更大的数字分解成多个三位数的部分。比如, 12345就可以分解成12和345,然后分别处理。
我们通过 while循环不断地从右往左处理数字的每一部分(每三位)。每处理一部分,就会根据当前的单位(如“Thousand”,“Million”等)拼接到结果字符串中。
最后,返回结果字符串时,会去除掉多余的空格。
注意事项
零的特殊处理: 如果输入是0,直接返回 "Zero"。空格问题: 由于英文中有些数字的拼接会有多余的空格(例如 20 + 1会得到"Twenty One"),所以我们需要在拼接时确保不会有多余的空格。
总结
对编程、职场感兴趣的同学,大家可以联系我微信:golang404,拉你进入“程序员交流群”。
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》。