一、题目![]()
二、解题
思路:
- 遍历数组,用字典记录数值对应的索引
- 对当前数字
num,计算需要配对的数target - num - 如果配对数已经存在字典中,直接返回两个下标
- 不存在就把当前数字和下标存入字典
1、完整代码
class Solution(object): def twoSum(self, nums, target): """ :type nums: List[int] :type target: int :rtype: List[int] """ hash_map = {} for idx, num in enumerate(nums): another = target - num if another in hash_map: return [hash_map[another], idx] hash_map[num] = idx return []2.逐行代码解释
# 定义类 Solution,LeetCode 固定模板要求 class Solution(object): # 定义方法 twoSum,self 代表类实例,接收两个参数 nums数组、target目标和 def twoSum(self, nums, target): """ :type nums: List[int] # 注释:nums 是整数列表 :type target: int # 注释:target 是整数 :rtype: List[int] # 注释:函数返回整数列表(两个下标) """ # 创建空字典 hash_map,作用:存储「数组数字:对应下标」,用来快速查找 hash_map = {} # enumerate 同时遍历下标idx和对应数值num,逐个取数组元素 for idx, num in enumerate(nums): # 计算配对需要的另一个数:目标和 - 当前数字 another = target - num # 判断需要的另一半数字是否已经存在字典里(也就是前面遍历过) if another in hash_map: # 存在就直接返回 [另一半数字的下标, 当前数字下标] return [hash_map[another], idx] # 另一半不存在,把当前数字和它的下标存入字典,供后面数字匹配 hash_map[num] = idx # 题目说明输入一定存在唯一解,代码永远走不到这里,兜底返回空列表 return []3、逐行代码解析(零基础,比较详细)
class Solution(object):class:Python 关键字,用来创建一个类(可以理解为一个代码盒子,专门装解题函数)Solution:自定义类的名字,LeetCode 强制规定必须叫这个,不能改(object):代表这个类继承 Python 最基础的通用对象,Python2/3 刷题模板固定写法,照抄就行:冒号:只要写 class、def、for、if,末尾必须加冒号,代表下面缩进的代码都属于这个类
def twoSum(self, nums, target):def:关键字,定义函数 / 方法twoSum:函数名,题目固定函数名,不能修改- 括号里三个参数:
self:类方法必备第一个参数,代表这个类自己,LeetCode 模板强制要写,固定放第一位nums:外部传进来的参数,是输入的数字数组,比如[2,7,11,15]target:外部传进来的目标数字,比如9
::冒号,下面缩进代码都属于这个函数
""" :type nums: List[int] :type target: int :rtype: List[int] """""" 内容 """:多行字符串注释,不执行,只给人看:type nums: List[int]:说明参数 nums 是整数列表:type target: int:说明参数 target 是整数:rtype: List[int]:说明这个函数最后要返回一个整数列表(两个下标)
hash_map = {}hash_map:自定义变量名,随便取名,这里用字典存数字和下标=:赋值符号,把右边东西放进左边变量{}:空字典,字典格式{键:值},我们这里存数字:下标示例:{2:0}代表数字 2 出现在下标 0 的位置
for idx, num in enumerate(nums):for:循环关键字,挨个取出数组里每一个元素enumerate():Python 内置函数,专门同时取出下标 + 对应数字例:nums=[2,7],enumerate 会依次拿出 (0,2)、(1,7)idx, num:一次性接收 enumerate 给的两个值idx:当前数字的下标(0、1、2...)num:当前遍历到的数字
in:关键字,代表遍历 nums 里面每一个内容::冒号,下一行缩进代码属于循环体
another = target - numtarget - num:数学减法,算出我们需要找的另一个数字例:target=9,当前 num=2,another=7another:变量,保存需要配对的数字
if another in hash_map:if:判断关键字,满足条件就执行下面缩进代码another in hash_map:判断语句in检查左边的数字是不是字典里已经存过(前面循环见过这个数)::冒号,下一行缩进代码是 if 成立时执行的内容
return [hash_map[another], idx]return:关键字,直接结束整个函数,把后面的数据返回出去[]:列表,存放两个下标,题目要求返回列表格式hash_map[another]:字典取值语法,字典[键],取出 another 对应的下标idx:当前循环数字的下标
hash_map[num] = idx- 字典赋值语法:
字典[键] = 值 - 把当前数字 num 作为键,下标 idx 作为值存入字典
- 顺序很关键:先判断、再存入,避免同一个数字自己和自己配对
return []- 循环全部走完还没找到就返回空列表
[] - 题目保证一定存在解,这行代码永远不会运行,只是兜底