python版 Leetcode刷题:两数之和

2020年08月20日 146点热度 1人点赞 0条评论

整了个idea的leetcode插件,方便刷题,记录下刷的第一题!

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标

三种方法中最后一个是最开始想出来的,后来修改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]

 

阿布

源自灵魂深处的自我救赎。

文章评论