swift代码-2. 两数相加 [中等] https://leetcode-cn.com/problems/add-two...
在本题目中,我们面临的是一个经典的编程挑战,源自著名的在线编程面试平台LeetCode。问题标题为"两数相加",难度被标记为中等,主要涉及的是使用Swift编程语言来解决这个问题。该问题的核心是模拟两个链表节点表示的非负整数相加的过程。链表的每个节点存储一个数字位,链表的顺序是从个位到最高位。我们需要编写一个函数,接收两个这样的链表作为输入,并返回它们相加的结果。 让我们理解问题的背景和需求。链表是一种数据结构,其中每个节点包含数据和指向下一个节点的引用。在这个问题中,链表的节点代表数字的位,例如,链表`1->2->3`代表数字123。两个链表分别表示两个要相加的数,我们任务是将这两个链表表示的数相加,返回一个新的链表表示结果。 在Swift中,我们可以创建自定义的链表节点类,如`ListNode`,它有一个整数值和一个指向下一个节点的指针。示例代码如下: ```swift class ListNode { var val: Int var next: ListNode? init(_ val: Int) { self.val = val self.next = nil } } ``` 接下来,我们需要实现`addTwoNumbers`函数,该函数接收两个`ListNode`类型的参数,并返回一个新的`ListNode`。函数的主要逻辑如下: 1. 初始化两个指针,`ptr1`和`ptr2`,分别指向输入链表的头节点。 2. 初始化一个指针`carry`,用于存储进位,初始值为0。 3. 创建一个新链表`result`,用于存储相加结果。 4. 当`ptr1`或`ptr2`不为空时,执行以下操作: - 计算当前位的和:`sum = ptr1?.val ?? 0 + ptr2?.val ?? 0 + carry` - 更新进位:`carry = sum / 10` - 创建新节点,值为`sum % 10`,并添加到结果链表末尾。 - 如果`ptr1`不为空,更新`ptr1`为`ptr1?.next` - 如果`ptr2`不为空,更新`ptr2`为`ptr2?.next` 5. 如果最后还有进位,创建一个新节点,值为进位,添加到结果链表末尾。 6. 返回结果链表的头节点。 完整代码如下: ```swift func addTwoNumbers(_ l1: ListNode?, _ l2: ListNode?) -> ListNode? { var ptr1 = l1, ptr2 = l2 var carry = 0 var result = ListNode(0) var currentNode = result while ptr1 != nil || ptr2 != nil { let num1 = ptr1?.val ?? 0 let num2 = ptr2?.val ?? 0 let sum = num1 + num2 + carry carry = sum / 10 currentNode.next = ListNode(sum % 10) if ptr1 != nil { ptr1 = ptr1?.next } if ptr2 != nil { ptr2 = ptr2?.next } currentNode = currentNode.next } if carry > 0 { currentNode.next = ListNode(carry) } return result.next } ``` 这个`addTwoNumbers`函数通过迭代处理链表,确保正确地处理进位,并创建新的链表来表示结果。这个问题锻炼了我们对链表操作、进位计算以及条件逻辑的理解,对于提升Swift编程能力非常有帮助。 在实际的`main.swift`文件中,我们可以编写一些测试用例,调用`addTwoNumbers`函数,验证其正确性。例如: ```swift let l1 = ListNode(2) l1.next = ListNode(4) l1.next?.next = ListNode(3) let l2 = ListNode(5) l2.next = ListNode(6) l2.next?.next = ListNode(4) let result = addTwoNumbers(l1, l2) while result != nil { print(result!.val, terminator: "->") result = result?.next } ``` 这将输出相加后的链表`7->0->8`,对应数字708。 在`README.txt`文件中,通常会包含关于如何运行代码、预期输出和其他相关信息的简短说明。在本例中,由于问题相对简单,`README.txt`可能只包含如何构建和运行`main.swift`的指令,以及如何查看`addTwoNumbers`函数的结果。 解决这个问题需要对Swift的数据结构(如链表)和控制流有深入理解,同时也提供了一个练习链表操作和递归思维的好机会。通过这个练习,开发者可以增强在实际编程环境中解决问题的能力。
- 1
- 粉丝: 5
- 资源: 935
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 10、安徽省大学生学科和技能竞赛A、B类项目列表(2019年版).xlsx
- 9、教育主管部门公布学科竞赛(2015版)-方喻飞
- C语言-leetcode题解之83-remove-duplicates-from-sorted-list.c
- C语言-leetcode题解之79-word-search.c
- C语言-leetcode题解之78-subsets.c
- C语言-leetcode题解之75-sort-colors.c
- C语言-leetcode题解之74-search-a-2d-matrix.c
- C语言-leetcode题解之73-set-matrix-zeroes.c
- 树莓派物联网智能家居基础教程
- YOLOv5深度学习目标检测基础教程