设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 8067|回复: 5
打印 上一主题 下一主题

求助!代码运行到后面,条件语句不执行,导致结果没有...

[复制链接]

1

主题

0

好友

19

积分

新手上路

Rank: 1

跳转到指定楼层
楼主
发表于 2018-4-12 10:29:27 |显示全部楼层 |倒序浏览
#给定一个包含 n 个整数的数组 S,是否存在属于 S 的三个元素 a,b,c 使得 a + b + c = 0 ?找出所有不重复的三个元素组合使三个数的和为零。

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

#下面代码只输出了部分组合,调试发现运行到后面满足 nums+nums[j]+nums[k]==0时,后面的语句不执行了。求大神指教~
def threeSum(nums):
        nums.sort()
        a=[]
        for i in range(0,len(nums)-2):
            for j in range(i+1,len(nums)-1):
                for k in range(j+1,len(nums)):
                    if nums+nums[j]+nums[k]==0:
                        list=[nums,nums[j],nums[k]]
                        if len(a)==0:
                            a.append(list)
                        else:
                            r=0
                            for i in range(0,len(a)):
                                if list.__eq__(a):
                                    r=1
                            if r==0:
                                a.append(list)

        return a


nums=[-4,-2,-2,-2,0,1,2,2,2,3,3,4,4,6,6]
print threeSum(nums)

回复

使用道具 举报

1

主题

0

好友

19

积分

新手上路

Rank: 1

沙发
发表于 2018-4-12 10:33:21 |显示全部楼层
代码运行结果:[[-4, -2, 6], [-4, 0, 4], [-2, -2, 4], [-2, 0, 2]]
正确结果应该是:[[-4,-2,6],[-4,0,4],[-4,1,3],[-4,2,2],[-2,-2,4],[-2,0,2]]
回复

使用道具 举报

1

主题

0

好友

19

积分

新手上路

Rank: 1

板凳
发表于 2018-4-12 20:41:58 |显示全部楼层
本帖最后由 wanghui 于 2018-4-12 20:57 编辑
crossin先生 发表于 2018-4-12 11:45
nums+nums[j]+nums[k]==0
你这么写程序居然还能执行?

回复

使用道具 举报

1

主题

0

好友

19

积分

新手上路

Rank: 1

地板
发表于 2018-4-12 20:57:02 |显示全部楼层
本帖最后由 wanghui 于 2018-4-12 20:58 编辑
wanghui 发表于 2018-4-12 20:41
我源代码是nums+nums[j]+nums[k]==0,不知道为什么贴出来就变成nums+nums[j]+nums[k]==0。[/ba ...
  1. def threeSum(nums):
  2.         nums.sort()
  3.         a=[]
  4.         for i in range(0,len(nums)-2):
  5.             for j in range(i+1,len(nums)-1):
  6.                 for k in range(j+1,len(nums)):
  7.                     if nums[i]+nums[j]+nums[k]==0:
  8.                         list=[nums[i],nums[j],nums[k]]
  9.                         if len(a)==0:
  10.                             a.append(list)
  11.                         else:
  12.                             r=0
  13.                             for i in range(0,len(a)):
  14.                                 if list.__eq__(a[i]):
  15.                                     r=1
  16.                             if r==0:
  17.                                 a.append(list)
  18.                                                                
  19.         return a
  20.                                             
  21.          
  22. nums=[-4,-2,-2,-2,0,1,2,2,2,3,3,4,4,6,6]
  23. print threeSum(nums)
复制代码
回复

使用道具 举报

1

主题

0

好友

19

积分

新手上路

Rank: 1

5#
发表于 2018-4-12 22:59:07 |显示全部楼层
风扇很响 发表于 2018-4-12 22:51
你这个为什么要这么麻烦呢,直接用itertools加上一个去重处理不就完了吗。。。"选择困难的农药召唤师"那题 ...

哦哦,我刚开始接触,对python函数和工具还不熟。领教了,多谢!但还是想问一下您知道我的代码问题出在哪里吗?
回复

使用道具 举报

1

主题

0

好友

19

积分

新手上路

Rank: 1

6#
发表于 2018-4-13 10:00:54 |显示全部楼层
crossin先生 发表于 2018-4-12 23:52
你上下两个 i 冲突了

如果你把每次的i,j,k 都 print 出来,应该就能发现这个问题了 ...

的确,多谢先生~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-5-5 13:39 , Processed in 0.029043 second(s), 22 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部