find-num-1.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. """
  4. Q:
  5. 给函数传递一个正整数的列表alist和一个正整数T,假装它等于[1,3,6,4,2,7],给出alist里所有相加等于T的元素的list,
  6. 每个数只用一次。比如T=7,列表里3+4=7,7=7,1+6=7。你的函数就要返回[[3,4],[7],[1,6]]
  7. A:
  8. 如果列表里面每个数字可以不重复,解法利用哈希标记,这是k-num算法在面对2元数据时的思想
  9. """
  10. def find_num(alist, T):
  11. mark = {}
  12. for v in alist:
  13. mark[v] = True
  14. result = []
  15. for v in alist:
  16. if not mark[v]:
  17. continue
  18. if v == T:
  19. result.append([v])
  20. mark[v] = False
  21. continue
  22. if mark.__contains__(T-v) and mark[T - v]:
  23. result.append([v, T - v])
  24. mark[v] = False
  25. mark[T - v] = False
  26. return result
  27. if __name__ == '__main__':
  28. n = 0
  29. T = 0
  30. while True:
  31. print("input T:")
  32. T = int(input())
  33. print('input data length:')
  34. n = int(input())
  35. print('input digits: ')
  36. alist = []
  37. for i in range(0, n):
  38. digit = int(input())
  39. alist.append(digit)
  40. result = find_num(alist, T)
  41. print(result)