- 0
- 0
- 约7.04千字
- 约 18页
- 2026-02-26 发布于福建
- 举报
第PAGE页共NUMPAGES页
2026年编程工程学位对口的面试题及答案解析
一、编程基础(5题,每题10分,共50分)
1.题目:
请编写一个函数,实现将任意进制数(二进制到十六进制)转换为十进制数。输入参数包括数字字符串和进制数(2-16),输出为十进制整数。假设输入合法且数字字符串仅包含对应进制的合法字符。
答案:
python
defconvert_to_decimal(num_str,base):
ifbase2orbase16:
raiseValueError(Basemustbebetween2and16)
digits=0123456789ABCDEF
decimal=0
fori,charinenumerate(num_str[::-1]):
ifchar.upper()notindigits[:base]:
raiseValueError(fInvalidcharacter{char}forbase{base})
decimal+=digits.index(char.upper())(basei)
returndecimal
解析:
-通过遍历数字字符串的每一位,从最低位开始计算权重(base的幂次),乘以对应字符的十进制值后累加。
-处理字符时需考虑大小写,使用`digits`映射表简化转换。
-基于错误处理确保输入合法性,如进制范围和字符有效性。
2.题目:
实现一个函数,统计字符串中所有重复字符的出现次数,返回结果为字典形式,如`{a:3,b:2}`。忽略大小写和非字母字符。
答案:
python
defcount_duplicate_chars(s):
counts={}
forcharins.lower():
ifchar.isalpha():
counts[char]=counts.get(char,0)+1
return{k:vfork,vincounts.items()ifv1}
解析:
-使用`lower()`统一处理大小写,`isalpha()`过滤非字母字符。
-通过`get`方法简化计数逻辑,最后筛选出现次数大于1的字符。
3.题目:
编写一个递归函数,实现斐波那契数列的第n项(n≥1)。要求时间复杂度低于O(n2)。
答案:
python
deffibonacci(n):
ifn=1:
returnn
memo={}
defhelper(x):
ifxinmemo:
returnmemo[x]
memo[x]=helper(x-1)+helper(x-2)
returnmemo[x]
returnhelper(n)
解析:
-使用备忘录(memoization)避免重复计算,将时间复杂度降至O(n)。
-递归内部函数`helper`存储已计算结果,减少递归深度。
4.题目:
实现一个栈(Stack)类,支持`push`、`pop`和`peek`操作,且`peek`需在O(1)时间返回栈顶元素但不移除它。
答案:
python
classStack:
def__init__(self):
self.items=[]
defpush(self,item):
self.items.append(item)
defpop(self):
ifnotself.items:
raiseIndexError(Popfromemptystack)
returnself.items.pop()
defpeek(self):
ifnotself.items:
raiseIndexError(Peekfromemptystack)
returnself.items[-1]
解析:
-使用列表`items`存储栈元素,`append`和`pop`操作均为O(1)。
-`peek`直接返回`items[-1]`,不修改栈状态。
5.题目:
给定一个整数数组,返回其中和为特定值的最长子数组的长度。例如,`nums=[1,2,3,1,1,2,2,1]`,目标和为3,最长子数组为`[1,2]`,返回2。
答案:
python
deflongest_subarray_with_sum(nums,target):
prefix_sum={0:-1}#初始化前缀和为0时索引为-1
max_len=0
current_sum=0
fori,numinenumerate(nums):
current_sum+=num
i
原创力文档

文档评论(0)