原题:
| 12
 3
 4
 5
 
 | 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。
 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
 
 你可以按任意顺序返回答案。
 
 | 
示例 1:
| 12
 3
 
 | 输入:nums = [2,7,11,15], target = 9输出:[0,1]
 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1]
 
 | 
示例 2:
| 12
 
 | 输入:nums = [3,2,4], target = 6输出:[1,2]
 
 | 
示例 3:
| 12
 
 | 输入:nums = [3,3], target = 6输出:[0,1]
 
 | 
1. 方法一
暴力破解,没什么思路可说的。
| 12
 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 的索引即可。
| 12
 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 中,继续遍历直到找到为止。
| 12
 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]
 
 |