三数之和
CSDN“每日一练”(Python)题目
练习题目
我的想法
我起初设想,是列出所有sum()为0的组合,剔除不合规和重复的就好。实现起来简单。🤗🤗🤗
但,“想法美好而现实残酷”——我怎么也码不出判断合规和元素相同链表的代码。😭😭直到想了几天之后的今天,才码出了两个判断方法,得以实现题目要求。但,还可以优化代码,把判断链表元素相同放到列出合规组合后面,就少判断不合规的组合,类似“冒泡排序”,但我今天就是写不出来了。😭😭
代码运行效果
python完整代码
(如果从语句注释不能清楚作用,请评论区留言指教和探讨。🤝)
# coding: utf-8
def isvalid(lis, lis0):
'''判断组合有效'''
temp = lis0[:]
for i in lis:
#print(i) #调试用语句。
if i in temp: #i在原列表置flag为True,删除原列表中的第一个i并继续遍历。
flag = True
temp.remove(i)
else: #i不在原列表,置flag为False并退出遍历。
flag = False
break
return flag
#input(f'\n\n{isvalid([2, 5, 9, 5], [0, 5, 9, 2, 3, 5, 4])}') #该行为调试函数功能代码。
def isremove(lis, lis2):
'''比较两列表元素是否相同'''
if len(lis)!=len(lis2): #列表元素不等,返回False。
return False
temp = lis2[:]
for i in lis:
if i in temp: #i在比对列表置flag为True,删除比对列表中的第一个i并继续遍历。
flag = True
temp.remove(i)
else: #i不在比对列表,置flag为False并退出遍历。
flag = False
break
return flag
#input(f'\n\n{isremove([2, -1, -1], [-1, 2, -1])}') #该行为调试函数功能代码。
s = '''三数之和'''
blank = ' '
line = '﹊'*21
nums = [-1, 0, 1, 2, -1, -4]
nums_out = []
for i in nums:
for j in nums:
for k in nums:
if i+j+k==0:
new_nums = [i, j, k]
if new_nums not in nums_out and isvalid(new_nums, nums): #组合有效且不重复,追加到输出数组。
flag = True
for m in nums_out: #判断输出数组中是否有相同元素数组,有则继续下一组合。
if isremove(m, new_nums):
flag = False
break
if flag is True: #组合数组不在输出数组中,追加组合数组。
nums_out.append(new_nums)
input(f'\n\n{s:.^38}\n\n数组:{nums}\n{line}\n\n输出:{nums_out}\n\n{"The End":_^42}')
我的博文推荐:
- 排序数组中查找元素的重复起止位置(当前阅读1194)
- 柱状图中最大矩形(当前阅读1595)
- 电话拨号键盘的字母组合(当前阅读1206)
- 密码强度检测器(当前阅读1662)
- 求列表平衡点(当前阅读1694)
- 字符串统计(当前阅读1630)
- 尼姆游戏代码优化版(当前阅读815)
- 尼姆游戏(聪明版首发)(当前阅读3230)
推荐条件
点阅破千
参考文章:
上一篇: 斐波那契数列的递归实现和for实现
下一篇:
![老齐漫画头像](https://i-blog.csdnimg.cn/blog_migrate/8cbf2c45d8b57205b31ef4963b3b9854.jpeg)
精品文章:
- OPP三大特性:封装中的property
- 通过内置对象理解python'
- 正则表达式
- python中“*”的作用
- Python 完全自学手册
- 海象运算符
- Python中的 `!=`与`is not`不同
- 学习编程的正确方法
来源:老齐教室