您的位置:首页 > 编程语言 > Python开发

Python 解读列表中TwoSum及FourSum问题

2018-02-27 10:19 573 查看
1.求解列表中的两元素和,原题为letcode习题:
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution.
Example:Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].
解答:此题简单处理列表中两元素和等于目标数并输出索引值列表,不考虑顺序问题,则做列表遍历即可完成:
错误解法:
def add(target, list1):
console = []
for a in list1:
ans = []
if target-a in list1:
ans.append(list1.index(a)) # 没有考虑如果列表中有重复元素,如:[1, 0, -1, 0, -2, 2],取不到后面重复元素的index值
ans.append(list1.index(target-a))
if sorted(ans) in console:
continue
else:
console.append(ans)
return print(console)执行结果:add(1, [1, 0, -1, 0, -2, 2])
[[0, 1], [2, 5]]仔细分析,这个结果不完整,所以在使用list.index(value)时,必须要考虑重复的列表元素,完整解法:enumerate()返回index和value列表对象:def add(target, list1):
console = []
for i in range(len(list1)):
if target-list1[i] in list1:
for item in enumerate(list1):
ans = []
if item[1] == target-list1[i]:
ans.append(i)
ans.append(item[0])
if sorted(ans) in console:
continue
else:
console.append(ans)
return print(console)
if __name__ == '__main__':
    add(1, [1, 0, -1, 0, -2, 2])
# 结果:
[[0, 1], [0, 3], [2, 5]]2.FourSum问题
Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.
Note:

Elements in a quadruplet (a,b,c,d) must be in non-descending order. (ie, a ≤ b ≤ c ≤ d)
The solution set must not contain duplicate quadruplets.
For example, given array S = {1 0 -1 0 -2 2}, and target = 0.

A solution set is:
(-1,  0, 0, 1)
(-2, -1, 1, 2)
(-2,  0, 0, 2)
解答:
def four_sum(target, list1=[]):
console = []
length = len(list1)
for i in range(0, length-3):
for j in range(i+1, length-2):
for k in range(j+1, length-1):
if target == list1[i] + list1[j] + list1[k] + list1[k+1]:
console.append([list1[i], list1[j], list1[k], list1[k+1]])
else:
continue
return print(console)
结果:if __name__ == '__main__':
four_sum(0, [1, 0, -1, 0, -2, 2])
#结果:
[[1, 0, -1, 0], [1, -1, -2, 2], [0, 0, -2, 2]]
这里也要考虑列表中元素重复的问题,只能用index取value,不能用value求index,或造成错误。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: