原题:

1
2
3
4
5
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

示例 1:

1
2
3
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1]

示例 2:

1
2
输入:nums = [3,2,4], target = 6
输出:[1,2]

示例 3:

1
2
输入:nums = [3,3], target = 6
输出:[0,1]

1. 方法一

暴力破解,没什么思路可说的。

1
2
3
4
5
6
7
8
9
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
for num1 in nums:
for num2 in nums:
if num1 + num2 == target:
if (num1 == num2) & (nums.count(num1) == 1):
continue
else:
return [nums.index(num1),nums.index(num2, nums.index(num1) + 1)]

2. 方法二

解题关键主要是想找到 num2 = target - num1,判断num2 是否也在 list 中,找到 num2,再直接返回 num2 的索引即可。

1
2
3
4
5
6
7
8
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
for num in range(len(nums)):
if target - nums[num] in nums:
if (nums.count(target - nums[num]) == 1) & (target - nums[num] == nums[num]):
continue
else:
return [num, nums.index(target - nums[num], num + 1)]

3. 方法三

遍历数组 nums,num 为当前下标,每个值都判断字典 dic 中是否存在 target-nums[num] 的 key 值;如果存在则找到了两个值,如果不存在则将当前的 (nums[num],num) 存入字典 dic 中,继续遍历直到找到为止。

1
2
3
4
5
6
7
8
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
dic = {}
for num in range(len(nums)):
if dic.get(target - nums[num]) == None :
dic[nums[num]] = num
else:
return [dic[target - nums[num]], num]