LeetCode算法【三数和为零】【Python】.docxVIP

LeetCode算法【三数和为零】【Python】.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
题目描述 给定一个包含?n?个整数的数组?nums,判断?nums?中是否存在三个元素?a,b,c ,使得?a + b + c =?0 ?找出所有满足条件且不重复的三元组。 解题思路: 1、先排序,从小到大开始 2、最外层使用for循环, 从0到 len(nums),全部走一遍 3、每循环一次,i位置数 和 后面的数中查询两个数,使得三个数的和为0 4、后面的两个数可以定位i位置的后一个数 L 和数列中最后一个数 R 5、根据三个数的和结果,如果刚好是0,则 L+1, R-1 再找一组解 6、如果和的结果 大于0,右边的值向左移动 ,即R-1 7、如果和的结果 小于0,左边的值向右移动, 即 L+1 8、以上操作中, 可以需要多次执行(While循环),退出的条件是L R 代码如下: class Solution(object): def threeSum(self, nums): nums.sort() # 排序 res = [] for i in range(len(nums)): # 遍历每一个数 if i == 0 or nums[i] nums[i - 1]: # 确定不重复的数字(开头) l = i + 1 r = len(nums) - 1 while l r: # 左边的位置 必须小于 右边的位置 s = nums[i] + nums[l] + nums[r] # 三个数的和 if s == 0: res.append([nums[i], nums[l], nums[r]]) # 再找下一组解 l += 1 r -= 1 # 左边向右移动到不重复数为止 while l r and nums[l] == nums[l - 1]: l += 1 # 右边向左边移动不重复数为止 while r l and nums[r] == nums[r + 1]: r -= 1 elif s 0: r -= 1 else: l += 1 return res 测试代码 nums = [ [-1, 0, 1, 2, -1, -4], [-4, -1, -1, 0, 1, 2, 4], [-5, -3, -2, 0, 1, 2, 2, 3], [1, 2, -2, -1], [0, -4, -1, -4, -2, -3, 2], [0,1,1], [0,0,0], [4, 0, 2, 3, -1], [3, 0, -2, -1, 1, 2], [-4, -2, -2, -2, 0, 1, 2, 2, 2, 3, 3, 4, 4, 6, 6], [-1, -2, -3, 4, 1, 3, 0, 3, -2, 1, -2, 2, -1, 1, -5, 4, -3], [-4, -2, 1, -5, -4, -4, 4, -2, 0, 4, 0, -2, 3, 1, -5, 0] ] for datas in nums: print(Solution().threeSum(datas)) 更多课程咨询可找任姐姐哦:1976279437

文档评论(0)

品牌设计小李 + 关注
实名认证
服务提供商

专注私人订制,文书方案。

1亿VIP精品文档

相关文档