微软件工程师职位面试题及答案.docxVIP

  • 0
  • 0
  • 约4.16千字
  • 约 11页
  • 2026-02-14 发布于福建
  • 举报

第PAGE页共NUMPAGES页

2026年微软件工程师职位面试题及答案

一、编程题(共5题,每题20分,总分100分)

1.题目:

编写一个函数,实现将一个非负整数转换为其对应的英文表示。例如,输入123,输出onehundredtwentythree;输入1001,输出onethousandone。

答案:

python

defnumber_to_words(num):

ifnum==0:

returnzero

digits=[,one,two,three,four,five,six,seven,eight,nine]

teens=[ten,eleven,twelve,thirteen,fourteen,fifteen,sixteen,seventeen,eighteen,nineteen]

tens=[,,twenty,thirty,forty,fifty,sixty,seventy,eighty,ninety]

thousands=[,thousand,million,billion]

defhelper(n):

ifn==0:

return

elifn10:

returndigits[n]+

elifn20:

returnteens[n-10]+

elifn100:

returntens[n//10]++helper(n%10)

else:

returndigits[n//100]+hundred+helper(n%100)

result=

foriinrange(4):

ifnum%1000!=0:

result=helper(num%1000)+thousands[i]++result

num//=1000

returnresult.strip()

解析:

-分解数字为千、百、十、个位,逐级转换。

-处理0-9、10-19的特殊情况。

-每三位一组,对应thousand、million等后缀。

-避免重复空格,最后strip去尾空。

2.题目:

给定一个字符串数组,返回所有可能的子集(无重复元素)。例如,输入[1,2,3],输出[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]。

答案:

python

defsubsets(nums):

result=[]

nums.sort()

defbacktrack(start,path):

result.append(path.copy())

foriinrange(start,len(nums)):

path.append(nums[i])

backtrack(i+1,path)

path.pop()

backtrack(0,[])

returnresult

解析:

-先排序避免重复。

-回溯法,每次选择或不选择当前元素。

-路径path记录当前选择,result存储所有子集。

3.题目:

实现一个LRU(最近最少使用)缓存,支持get和put操作。get返回键对应的值,若不存在返回-1;put插入或更新键值对,若超出容量则删除最久未使用项。

答案:

python

classLRUCache:

def__init__(self,capacity:int):

self.capacity=capacity

self.cache={}

self.order=[]

defget(self,key:int)-int:

ifkeyinself.cache:

self.order.remove(key)

self.order.append(key)

returnself.cache[key]

return-1

defput(self,key:int,value:int)-None:

ifkeyinself.cache:

self.order.remove(key)

eliflen(self.cache)==self.capacity:

oldest=self.order.pop(0)

delself.cache[oldest]

self.cache[key]=value

self.order.append(key)

解析:

-使用哈希表cache存储键值对,列表order记录使用顺序。

-get时移动键到末尾表示最近使用。

-put时先检查键是否存在,若超出容量删除最久未使用项。

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档