Python描述 LeetCode15. 三数之和

  大家好,我是亓官劼(qí guān jié ),在【亓官劼】公众号、GitHub、B站等平台分享一些技术博文,主要包括前端开发、python后端开发、小程序开发、数据结构与算法、docker、Linux常用运维、NLP等相关技术博文,时光荏苒,未来可期,加油~

  如果喜欢博主的文章可以关注博主的个人公众号【亓官劼】(qí guān jié),里面的文章更全更新更快。如果有需要找博主的话可以在公众号后台留言,我会尽快回复消息.

Python描述 LeetCode15. 三数之和_三元组

本文原创为【亓官劼】(qí guān jié ),请大家支持原创,部分平台一直在恶意盗取博主的文章!!! 全部文章请关注微信公众号【亓官劼】。

题目

给你一个包含 ​​n​​​ 个整数的数组 ​​nums​​​,判断 ​​nums​​ 中是否存在三个元素 *a,b,c ,*使得 a + b + c = 0 ?请你找出所有和为 ​​0​​ 且不重复的三元组。

**注意:**答案中不可以包含重复的三元组。

示例 1:

输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]

示例 2:

输入:nums = []
输出:[]

示例 3:

输入:nums = [0]
输出:[]

提示:

  • ​0 <= nums.length <= 3000​
  • ​-105 <= nums[i] <= 105​

解题思路

遍历两个数,剩下一个数使用字典进行验证。

Python描述

class Solution:
def threeSum(self, nums: List[int]) -> List[List[int]]:
nums.sort()
num_dict = {}
res = set()
for item in nums:
num_dict[item] = num_dict.get(item,0) + 1
for i in range(len(nums)):
for j in range(i+1,len(nums)):
tmp_sum = nums[i] + nums[j]
if num_dict.get(-1*tmp_sum,False):
if nums[i] == -1*tmp_sum == nums[j]:
if num_dict.get(-1*tmp_sum,False) >= 3:
res.add(tuple(sorted([nums[i],nums[j],-1*tmp_sum])))
elif nums[i] == -1*tmp_sum or -1*tmp_sum == nums[j]:
if num_dict.get(-1*tmp_sum,False) >= 2:
res.add(tuple(sorted([nums[i],nums[j],-1*tmp_sum])))
else:
res.add(tuple(sorted([nums[i],nums[j],-1*tmp_sum])))
res = [list(_) for _ in res]
return