返回
征服剑指 Offer(专项突击版)第17|18题,敲开算法题大门!
前端
2023-11-04 14:12:23
前端开发正以前所未有的速度蓬勃发展,对人才的要求也随之水涨船高。如今,面试前端工程师时,算法题已成为必不可少的考察内容。剑指 Offer(专项突击版)作为算法题的经典题库,备受求职者和技术爱好者的关注。为了帮助大家在面试和技术进阶中取得突破,我们特此带来剑指 Offer(专项突击版)第17|18题的详细解析。
剑指 Offer(专项突击版)第17题:打印从1到最大的n位数
题目输入数字n,按顺序打印从1到最大的n位十进制数。比如输入3,则打印出1、2、3、...、999。
题目解析:
-
确定最大的n位数:最大的n位数为9的n次方。
-
从1开始循环,每次循环将当前数字与最大的n位数比较。
-
如果当前数字小于最大的n位数,则将当前数字输出到控制台。
-
如果当前数字等于最大的n位数,则循环结束。
代码示例:
def print_n_digit_numbers(n):
"""
打印从1到最大的n位数
:param n: 数字n
"""
# 确定最大的n位数
max_n_digit_number = 9 ** n
# 从1开始循环
for i in range(1, max_n_digit_number + 1):
# 将当前数字输出到控制台
print(i)
# 调用函数
print_n_digit_numbers(3)
剑指 Offer(专项突击版)第18题:删除链表的节点
题目:给定一个链表,删除链表中等于给定值val的所有节点。
题目解析:
-
从链表的头节点开始遍历链表。
-
如果当前节点的值等于给定值val,则删除当前节点。
-
如果当前节点的值不等于给定值val,则将当前节点移动到下一个节点。
-
重复步骤2和步骤3,直到遍历完整个链表。
代码示例:
def delete_node(head, val):
"""
删除链表中等于给定值val的所有节点
:param head: 链表的头节点
:param val: 给定值
:return: 删除节点后的链表头节点
"""
# 如果链表为空,则直接返回空链表
if head is None:
return None
# 如果链表的头节点的值等于给定值,则删除链表的头节点
if head.val == val:
return head.next
# 从链表的头节点开始遍历链表
current_node = head
# 找到当前节点的前一个节点
while current_node.next is not None and current_node.next.val != val:
current_node = current_node.next
# 如果找到当前节点的前一个节点,则删除当前节点
if current_node.next is not None and current_node.next.val == val:
current_node.next = current_node.next.next
# 返回删除节点后的链表头节点
return head
# 调用函数
head = ListNode(1)
head.next = ListNode(2)
head.next.next = ListNode(3)
head.next.next.next = ListNode(4)
head.next.next.next.next = ListNode(5)
val = 3
new_head = delete_node(head, val)
# 打印删除节点后的链表
while new_head is not None:
print(new_head.val)
new_head = new_head.next
进阶建议:
-
熟练掌握算法题的解题思路和技巧。
-
定期练习算法题,提升解决问题的能力。
-
了解常见的算法题类型,以便在面试中快速识别和解决问题。
-
利用在线课程、书籍和网站等资源,不断扩展算法知识。
剑指 Offer(专项突击版)第17|18题是算法题练习的必经之路。通过对这两道题目的深入理解和掌握,您将为未来的技术进阶和面试挑战做好充分的准备。希望本文对您有所帮助,祝您在算法题的学习和实践中取得更大的进步。