Python描述 LeetCode15. 三数之和
原创
©著作权归作者所有:来自51CTO博客作者亓官劼_的原创作品,请联系作者获取转载授权,否则将追究法律责任
Python描述 LeetCode15. 三数之和
大家好,我是亓官劼(qí guān jié ),在【亓官劼】公众号、GitHub、B站等平台分享一些技术博文,主要包括前端开发、python后端开发、小程序开发、数据结构与算法、docker、Linux常用运维、NLP等相关技术博文,时光荏苒,未来可期,加油~
如果喜欢博主的文章可以关注博主的个人公众号【亓官劼】(qí guān jié),里面的文章更全更新更快。如果有需要找博主的话可以在公众号后台留言,我会尽快回复消息.
本文原创为【亓官劼】(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:
示例 3:
提示:
-
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