一、题目

Given an array S of n integers, are there elements abc in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.

Note:

  • Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c)
  • The solution set must not contain duplicate triplets.
    For example, given array S = {-1 0 1 2 -1 -4},A solution set is:(-1, 0, 1)(-1, -1, 2)

二、思路我的思路一直很简单,当初在做2Sum的时候,就是把求和问题变成了一个查找问题,定下一个数a,去找target-a在不在剩余的数里。3Sum也这么做,但是效率明显低多了。而且这题让输出所有可能的答案组合,牵扯到重复的问题。做法还是按照变求和为查询,定下a,b,找target-(a+b),唯一做的优化就是用哈希表存下已有的(a,b),这样不至于做重复的查找。但是这样毕竟不是办法,以后做4sum就要4层循环了,不是个事。看别人的答案,是从两边往中间找,这个挺好的。准备在3Sum Closet里试一下这种方法。

三、代码
 1 class Solution:
 2     # @param {integer[]} nums
 3     # @return {integer[][]}
 4     def threeSum(self, nums):
 5         nums.sort()
 6         passed_list = []
 7         result = []
 8         record = {}
 9         result_dict = {}
10         if len(nums) < 3:
11             return []
12         else:
13             for i in range(len(nums)):
14                 for j in range(i + 1, len(nums)):
15                     a = nums[i]
16                     b = nums[j]
17                     if (a, b) in record:
18                         pass
19                     else:
20                         record[(a, b)] = 0
21                         target = 0 - a - b
22                         if target in nums[j + 1:]:
23                             passed_list.append(a)
24                             passed_list.append(b)
25                             passed_list.append(target)
26                             if str(passed_list) in result_dict:
27                                 passed_list = []
28                                 pass
29                             else:
30                                 result.append(passed_list)
31                                 result_dict[str(passed_list)] = 0
32                                 passed_list = []
33             return result

四、总结

准备把n-sum这类问题全部做完,然后总结一下这类题的规律。

转载于:https://www.cnblogs.com/breada/p/4761906.html

[LeetCode]#13 3sum相关推荐

  1. LeetCode 923. 3Sum With Multiplicity

    题目地址: 做这道题前需要先做:LeetCode 15. 3Sum–Java,Python解法 题目地址:3Sum With Multiplicity - LeetCode Given an inte ...

  2. LeetCode 13. Roman to Integer

    问题链接 LeetCode 13. Roman to Integer 题目解析 将罗马数字转换成普通数字. 解题思路 先简单了解一下什么是罗马数字. 基本字符:I,V,X,L,C,D,M 相应的阿拉伯 ...

  3. LeetCode 16 3Sum Closest(最接近的3个数的和)

    翻译 给定一个有n个整数的数组S,找出S中3个数,使其和等于一个给定的数,target.返回这3个数的和,你可以假定每个输入都有且只有一个结果.例如,给定S = {-1 2 1 -4},和target ...

  4. c语言罗马数字换成整数,leetcode 13 罗马数字转整数 C语言

    leetcode 13 罗马数字转整数 原题 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 ...

  5. Python LeetCode(13.罗马数字转整数)

    Python LeetCode(13.罗马数字转整数) 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M ...

  6. Leetcode 13.罗马数字转整数

    Leetcode 13.罗马数字转整数 题目描述 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 100 ...

  7. LeetCode——15. 3Sum

    一.题目链接:https://leetcode.com/problems/3sum/ 二.题目大意: 3和问题是一个比较经典的问题,它可以看做是由2和问题(见http://www.cnblogs.co ...

  8. 【leetcode】3Sum

    3Sum Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find a ...

  9. LeetCode——16. 3Sum Closest

    一.题目链接:https://leetcode.com/problems/3sum-closest/ 二.题目大意: 给定一个数组A和一个目标值target,要求从数组A中找出3个数来,使得这三个数的 ...

最新文章

  1. java中异常回收_理解Java垃圾回收
  2. 总结django form
  3. python scrapy同时执行spiders多个爬虫
  4. 手把手教你实现机器学习SVM算法
  5. Single Number III
  6. final、finally、finalize 区别
  7. Java架构师成长之道之计算机组成原理概述篇
  8. 一元非线性方程求根的算法——二分法/牛顿迭代法
  9. 路在何方 路在脚下 -- !!
  10. easyui datagrid deleteRow(删除行)的BUG或者updateRow值更新了不展示问题
  11. 藤子不二雄博物馆之行
  12. 2022年茶艺师(高级)考试题及模拟考试
  13. java和scala代码可以混合编写吗_IDEA实现Java与Scala代码混合开发
  14. Spring实战笔记——(1)Spring之旅(上)
  15. 可以作为艺术作品欣赏的CT三维重建技术。
  16. c++ Qt5学习笔记 2021-1-21(文件系统QFile、QFileInfo、QDir、QFileSystemWatcher等使用,读取文本显示乱码,QDataStream二进制字节流读写)
  17. Shader学习23——描边+辉光
  18. 如何在cmd中,使用cd进入指定文件目录
  19. C#生成电子印章源码
  20. 正则_验证文本框输入的姓名是否规范(包含生僻字,不包含中文符号与其他字符)...

热门文章

  1. CTFshow 文件包含 web87
  2. sdut 2140 有向图中是否存在拓扑序列的判断
  3. A Simple Math Problem HDU - 5974
  4. cdf2rdf--复对角矩阵转化为实对角矩阵
  5. 矩阵乘法的四种理解方式
  6. 查看网页服务器搭建方式(Python3)
  7. javascript中的变量
  8. 深入理解JVM(一)编译openJDK
  9. spring quartz 的定时器cronExpression表达式写法(转载)
  10. PAT-乙级-1021. 个位数统计 (15)