- 0
- 0
- 约5.72千字
- 约 17页
- 2026-01-28 发布于福建
- 举报
第PAGE页共NUMPAGES页
2026年华为技术面试全攻略及答案详解
一、编程能力测试(共5题,每题20分,总分100分)
题目1:
请实现一个函数,输入一个正整数`n`,返回`n`的阶乘。要求使用递归方式实现,并考虑大数相乘的情况。
答案:
python
deffactorial(n):
ifn==0orn==1:
return1
else:
returnnfactorial(n-1)
处理大数相乘
deffactorial_large(n):
result=1
foriinrange(1,n+1):
result=i
returnresult
示例
print(factorial(5))#输出:120
print(factorial_large(100))#输出:93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
解析:
-递归方式实现阶乘简单直观,但要注意递归深度限制(Python默认1000层)。
-大数相乘需要考虑性能优化,可使用高精度算法或库(如`decimal`)。
题目2:
给定一个字符串`s`,请判断其是否为回文字符串。如果是,返回`True`;否则返回`False`。
答案:
python
defis_palindrome(s):
returns==s[::-1]
示例
print(is_palindrome(racecar))#输出:True
print(is_palindrome(hello))#输出:False
解析:
-判断回文可使用双指针或字符串反转,时间复杂度为O(n)。
-需注意空字符串和单字符字符串均为回文。
题目3:
请实现一个函数,输入一个非空数组`nums`和一个目标值`target`,返回数组中和为`target`的任意两个数的索引。如果没有解,返回`[]`。
答案:
python
deftwo_sum(nums,target):
num_dict={}
fori,numinenumerate(nums):
complement=target-num
ifcomplementinnum_dict:
return[num_dict[complement],i]
num_dict[num]=i
return[]
示例
print(two_sum([2,7,11,15],9))#输出:[0,1]
解析:
-哈希表可优化查找效率至O(n),但需注意重复元素处理。
-返回任意一组解即可,无需排序。
题目4:
请实现一个函数,输入一个链表的头节点`head`,返回其反转后的链表头节点。
答案:
python
classListNode:
def__init__(self,val=0,next=None):
self.val=val
self.next=next
defreverse_list(head):
prev=None
current=head
whilecurrent:
next_node=current.next
current.next=prev
prev=current
current=next_node
returnprev
示例
创建链表:1-2-3
head=ListNode(1,ListNode(2,ListNode(3)))
reversed_head=reverse_list(head)
输出:3-2-1
解析:
-反转链表需维护三个指针:`prev`、`current`、`next_node`。
-时间复杂度为O(n),空间复杂度为O(1)。
题目5:
给定一个整数数组`nums`,请返回其中不重复的数字个数。
答案:
python
defunique_numbers(nums):
returnlen(set(nums))
示例
print(unique_numbers([1,2,2,3,4,4,5]))#输出:5
解析:
-集合可自动去重,时间复杂度为O(n),但会改变元素顺序。
-若需保持顺序,可使用`dict.fromkeys(nums)`。
二、系统设计测试(共3题,每题30分,总分90分)
题目1:
设计一个简单的微博系统,需支
原创力文档

文档评论(0)