力扣 两数相加 python
时间: 2024-08-12 16:02:18 浏览: 184
在LeetCode(力扣)上,有一道名为“两数之和”的经典Python题目,编号为1。这是一道简单的查找题,任务是给定一个无序整数数组`nums`和一个目标值`target`,找出数组中是否存在两个元素,它们的和等于`target`。
Python解决方案通常是利用哈希表(字典)的数据结构,遍历数组的过程中,对于每个元素`num`,我们检查目标值`target - num`是否已经在字典中。如果在,则找到了一对符合条件的数;如果没有,我们就将`num`添加到字典中,作为下一次查找的起点。这种方法的时间复杂度是O(n),空间复杂度也是O(n)。
```python
def twoSum(nums, target):
# 创建一个空字典来存储数字及其索引
dict_nums = {}
for i, num in enumerate(nums):
# 如果目标值减去当前元素已存在字典中,直接返回结果
if target - num in dict_nums:
return [dict_nums[target - num], i]
# 否则,将当前元素及其索引添加到字典中
dict_nums[num] = i
# 没有找到解,返回空列表
return []
```
相关问题
力扣两数相加python
好的,这是力扣上的两数相加问题的 Python 代码示例:
```python
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
carry = 0
dummy = ListNode(0)
curr = dummy
while l1 or l2 or carry:
val1 = l1.val if l1 else 0
val2 = l2.val if l2 else 0
carry, val = divmod(val1 + val2 + carry, 10)
curr.next = ListNode(val)
curr = curr.next
l1 = l1.next if l1 else None
l2 = l2.next if l2 else None
return dummy.next
```
其中,`l1` 和 `l2` 是两个非空的链表,表示两个非负数,链表中每个节点的值都是 0-9 的数字,且按照逆序方式存储数字,即第一个节点包含最低位的数字。函数需要返回一个新的链表,表示两个数相加的和,同样按照逆序方式存储数字,如果有进位则需要将进位加入到下一个节点中。
力扣两数相加python3
力扣(LeetCode)的两数相加题目是一道比较经典的链表题目,要求实现一个函数,输入两个非空的链表,表示两个非负整数,将它们相加并返回一个新的链表。具体地,假设这两个非负整数分别为 num1 和 num2,它们的位数是按照逆序方式存储的,并且它们的每个节点只能存储一位数字。
以下是 Python3 的解法:
```python
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
# 创建一个新链表 head 和一个节点 cur,初始化为 None
head = cur = ListNode(None)
# carry 表示进位,初始化为 0
carry = 0
# 遍历两个链表,直到两个链表都为空
while l1 or l2:
# x 和 y 分别表示两个链表当前节点的值,如果当前节点为空,则默认值为 0
x = l1.val if l1 else 0
y = l2.val if l2 else 0
# 计算两个节点的和,以及进位 carry
total = x + y + carry
carry = total // 10
# 将当前节点的值插入到新链表中
cur.next = ListNode(total % 10)
cur = cur.next
# 如果链表不为空,则继续遍历
if l1:
l1 = l1.next
if l2:
l2 = l2.next
# 如果最后一位有进位,则需要在新链表中插入一个节点
if carry:
cur.next = ListNode(carry)
# 返回新链表的头节点
return head.next
```
阅读全文