leetCode threeSum 三数之和

该博客探讨了LeetCode中的三数之和问题,即寻找数组中和为零的三个不重复元素的组合。文章提供了至少一种解题方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

给定一个包含 n 个整数的数组 S,是否存在属于 S 的三个元素 a,b,c 使得 a + b + c = 0 ?找出所有不重复的三个元素组合使三个数的和为零。

注意:结果不能包括重复的三个数的组合。

例如, 给定数组 S = [-1, 0, 1, 2, -1, -4],

一个结果集合为:
[
  [-1, 0, 1],
  [-1, -1, 2]
]

解法一:

def threeSum(nums):
    zero = []
    for i, a in enumerate(nums):
        if a < 0:
            if -a in nums:
                if 0 in nums:
                    if [a, 0, -a] not in zero:
                        zero.append([a, 0, -a])
            for j, b in enumerate(nums):
                if b < 0 and i != j:
                    c = a + b
                    if -c in nums:
                        if [a, b, -c] not in zero and [b, a, -c] not in zero:
                            zero.append([a, b, -c])
                if b > 0:
                    c = -a - b
                    if c in nums[j+1:] and c > 0:
                        if [a, b, c] not in zero and [a, c, b] not in zero:
                            zero.append([a, b, c])
        if a == 0:
            b = c = a
            if b in nums[i+1: ]:
                n = nums[i+1: ].index(b) + (i+1)
                if c in nums[n + 1: ]:
                    if [a, b, c] not in zero:
                        zero.append([a, b, c])
    return zero

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值