整了个idea的leetcode插件,方便刷题,记录下刷的第一题!
三种方法中最后一个是最开始想出来的,后来修改nums之后发现不能返回,就有了1和2两种方法!
题目中有说明:假设每种输入只会 对应一个答案。
有想法的朋友可以自己实现一下。
# 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
#
# 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
#
# 可以给定任意数组,并且返回下标列表
#
# 示例:
#
# 给定 nums = [2, 7, 11, 15], target = 9
#
# 因为 nums[0] + nums[1] = 2 + 7 = 9
# 所以返回 [0, 1]
#
# Related Topics 数组 哈希表
# python3解法,思路大致相同
# leetcode submit region begin(Prohibit modification and deletion)
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
dict = {}
iList = []
for index, num in enumerate(nums):
dict[num] = index
for i, num in enumerate(nums):
j = dict.get(target - num)
if j is not None and i != j:
iList.append(i)
iList.append(j)
return list(set(iList))
def Sum2(self, nums, target):
dict = {}
res = []
for index, num in enumerate(nums):
dict[num] = index
for i, num in enumerate(nums):
j = dict.get(target - num)
if j is not None and i != j:
res.append((i, j))
del dict[target - num]
del dict[num]
return res
def twosum(self, nums, target):
# 初始化一个字典,用于记录(值:索引)
dict = {}
# 遍历enumerate(a),
# enumerate() 函数用于将一个可遍历的数据对象(如列表、
# 元组或字符串)组合为一个索引序列,
# 同时列出数据和数据下标。
for i, num in enumerate(nums):
# 如果目标值(target)减去num在字典dict中
if target - num in dict:
# 返回结果(target - num)以及结果的索引(i)
return [dict[target - num], i]
else:
# 将num以及索引值添加到dict中
dict[num] = i
if __name__ == '__main__':
nums = [2, 7, 11, 15, 4, 5, 3, 6, 1, 8]
target = 9
resl = Solution()
print("第一种方法--twoSum结果是:", resl.twoSum(nums, target))
print("第二种方法--Sum2结果是:", resl.Sum2(nums, target))
print("第三种方法--twosum结果是:", resl.twosum(nums, target))
结果如下:
D:\anaconda\python.exe D:/software/idea/dataTemp/leetcode/editor/cn/[1]两数之和.py
第一种方法--twoSum结果是: [0, 1, 4, 5, 6, 7, 8, 9]
第二种方法--Sum2结果是: [(0, 1), (4, 5), (6, 7), (8, 9)]
第三种方法--twosum结果是: [0, 1]