3.两数之和

# 梦开始的地方,Leetcode:1.两数之和,学透哈希表,map使用有技巧
# # 两数之和,学透哈希表,map使用有技巧!
# 给定一个整数数组nums和一个整数目标值target,
# 请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。
#
# 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
# 你可以按任意顺序返回答案。
# 
#
# 示例1:
# 输入:nums = [2, 7, 11, 15], target = 9
# 输出:[0, 1]
# 解释:因为nums[0] + nums[1] == 9 ,返回[0, 1] 。
#
# 示例2:
# 输入:nums = [3, 2, 4], target = 6
# 输出:[1, 2]
#
# 示例3:
# 输入:nums = [3, 3], target = 6
# 输出:[0, 1]

nums = [2, 7, 11, 15]
target = 9

path_dict = {}
res = []


# way1
def target_index(start_index, nums, target, path_dict, res):
    if sum(path_dict.values()) == target:
        # print("path_dict.keys()=", path_dict.keys())
        res.append(list(path_dict.keys()))
        return

    for i in range(start_index, len(nums)):
        path_dict.update({i: nums[i]})
        # print(path_dict)
        target_index(i+1, nums, target, path_dict, res)
        path_dict.pop(i)
    return res[0]

print(target_index(0, nums, target, path_dict, res))



# way2: hash map
def two_sum(nums, target):
    dict_a = {}
    for i in range(len(nums)):
        left = target - nums[i]
        if left in dict_a.keys():
            return [dict_a[left], i]

        dict_a.update({nums[i]:i})
    return []
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值