【leedcode】0001. 两数之和

x33g5p2x  于2021-11-09 转载在 其他  
字(1.5k)|赞(0)|评价(0)|浏览(210)


 

【leedcode】0001.两数之和

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

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:

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

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

方法一: 

  1. def twoSum(nums,target):
  2. for i,n in enumerate(nums):
  3. for j in range(i+1,len(nums)):
  4. if n+nums[j]==target:
  5. return [i,j]
  6. else:
  7. return []
  8. '''
  9. >>> twoSum([2,7,11,15],9)
  10. [0, 1]
  11. >>> twoSum([0,2,7,11,15],9)
  12. [1, 2]
  13. >>> twoSum([0,2,7,11,15],17)
  14. [1, 4]
  15. >>> twoSum([0,2,7,11,15],5)
  16. []
  17. >>>
  18. '''

方法二:

  1. def twoSum(nums, target):
  2. for i,n in enumerate(nums):
  3. m = target - n
  4. t = nums[i+1:]
  5. if m in t:
  6. return [i,i+1+t.index(m)]
  7. else:
  8. return []
  9. '''
  10. >>> twoSum([2,7,11,15],9)
  11. [0, 1]
  12. >>> twoSum([0,2,7,11,15],9)
  13. [1, 2]
  14. >>> twoSum([0,2,7,11,15],17)
  15. [1, 4]
  16. >>> twoSum([0,2,7,11,15],5)
  17. []
  18. >>>
  19. '''

方法三:

  1. def twoSum(nums, target):
  2. t = {}
  3. for i,n in enumerate(nums):
  4. if target-n in t:
  5. return [t[target-n], i]
  6. else:
  7. t[n] = i
  8. else:
  9. return []
  10. '''
  11. >>> twoSum([2,7,11,15],9)
  12. [0, 1]
  13. >>> twoSum([0,2,7,11,15],9)
  14. [1, 2]
  15. >>> twoSum([0,2,7,11,15],17)
  16. [1, 4]
  17. >>> twoSum([0,2,7,11,15],5)
  18. []
  19. >>>
  20. '''

方法四:

  1. >>> from itertools import combinations as comb
  2. >>> twoSum = lambda nums,target:[[nums.index(i[0]),nums.index(i[1])] for i in comb(nums,2) if sum(i)==target][0]
  3. >>> twoSum([2,7,11,15],9)
  4. [[0, 1]]
  5. >>> twoSum([0,2,7,11,15],9)
  6. [[1, 2]]
  7. >>> twoSum([0,2,7,11,15],17)
  8. [[1, 4]]
  9. >>> twoSum([0,2,7,11,15],5)
  10. []
  11. >>> twoSum([2,3,6,7,11,15],9)
  12. [[0, 3], [1, 2]]
  13. >>>

欢迎加入“派森特给站”社区!

https://bbs.csdn.net/forums/PythonTogether

相关文章