我想把上周参加微软线上算法面试的全过程贴出来,真实还原我当时的思路、对话和演算示例,帮大家更好地准备这一道常见题。
面试官直接在聊天框里发来原题:
“Please write a function that converts any integer into its English words representation.”
我心里一跳:核心需求就是把 1234567
这样的数字读成 “one million two hundred and thirty-four thousand five hundred and sixty-seven”。但细节有很多可能的追问。于是我第一时间在聊天室回复:
“我想确认一下,输入范围是 32 位正整数吗?如果是负数要输出 ‘minus’ 吗?另外我们需要在 ‘hundred’ 后面加上 英式的 ‘and’ 吗?”
面试官很爽快地答:“先按 0…2³¹-1 正整数来,记得提到负数和更大范围的扩展思路;‘and’ 英式可选,你可以说明。”这下我心里松了口气,也更有方向。
接下来我在白板(虚拟画布)上画了一个大数字 1,234,567 → [1] [234] [567]
,口播思路:
- 分组:从最低位开始,每三位一组;
- 小函数
convertChunk(n)
处理 0…999:- 如果
n < 20
,直接查ONES/TEENS
表; - 如果
20 ≤ n < 100
,先输出TENS[n//10]
(如 “forty”),再处理n%10
; - 如果
n ≥ 100
,先输出ONES[n//100] + " hundred"
,如果余数不为 0,再加 “ and ” + 递归处理余数;
- 如果
- 拼接:每组后面拼
""
/"thousand"
/"million"
/"billion"
,并把每组结果插到最前面; - 特殊情况:如果整个输入是 0,直接返回 “zero”;循环结束后再
trim()
空格。
我边写伪代码边解释,大概像这样:
function numberToWords(num):
if num == 0:
return "zero"
result = ""
chunkIndex = 0
while num > 0:
chunk = num % 1000
if chunk != 0:
words = convertChunk(chunk)
result = words + THOUSANDS[chunkIndex] + " " + result
num = num // 1000
chunkIndex += 1
return result.trim()
function convertChunk(n):
if n < 20:
return ONES[n]
if n < 100:
return TENS[n//10] + ("" if n%10==0 else " " + ONES[n%10])
// n >= 100
rem = n % 100
return ONES[n//100] + " hundred" + ("" if rem==0 else " and " + convertChunk(rem))
白板上,我还演示了具体算例:
- 处理
567
:<br>“five hundred and sixty seven” - 处理
234
:<br>“two hundred and thirty four” - 处理
1
:<br>“one” + 单位 “million”
最终合成:
"one million two hundred and thirty four thousand five hundred and sixty seven"
面试官接着问:“如果输入是 -123
呢?”
我答:“最外层加一句 if num<0 then prefix='minus '
,再对 abs(num)
走同样逻辑就行。”
她又问:“假如要支持任意长度数字,比如超出 64 位怎么办?”
我说:“可以用语言自带的 BigInteger
,或者把数字当字符串处理,每三位切一次,核心逻辑不变。” 对方对此表示认可,气氛非常像两位工程师在讨论设计。
后来,她还围绕“性能”“国际化”“递归 vs 迭代”“内存占用”等展开简短对话。我把时间复杂度 O(d)(d 是数字长度)、空间复杂度 O(d) 的分析也说了一遍。
整个流程下来,我没有背诵模板,而是:先问清需求 → 用图示拆解思路 → 给出伪代码 & 实例演算 → 补充边界和扩展 → 简述复杂度。面试官多次点头,最后用一句“great job”结束。
真心建议大家在准备这类题时,多预想:对方可能关心什么边界?性能?国际化?是不是要英国式/美式差异?当场模拟问答,不要只练代码,沟通逻辑也很关键。祝各位都能一面定乾坤,下次面试顺利过关!
本文的作者 石老师,在这里给大家打个硬广,csoahelp.com每日分享北美大厂面经,小红书也有更新,我们还提供种类多样的收费服务协助您进入北美科技大厂,有意向的微信扫码联系我,或者也可以通过其他方式联系我

If you need more interview support or interview proxy practice, feel free to contact us. We offer comprehensive interview support services to help you successfully land a job at your dream company.