LeetCode两数之和(Two Sum)问题报错:'list'对象不可调用
问题解决建议
1. 先修复触发TypeError的直接问题
报错行for i in nums(0,size)是把列表nums当成函数调用了,这是语法错误。如果要遍历数组的下标,应该用range()生成下标序列:
for i in range(size):
这里size是n-1,能保证i+1不会超出数组下标范围。
2. 修正输入元素的类型错误
你用input()添加的元素是字符串类型,数组里存的是['1','2',...],直接做加法会触发类型错误。需要把输入转为整数:
nums.append(int(input("Enter the array element: \t")))
3. 修正两数之和的逻辑错误
你的代码只检查了相邻元素的和,完全不符合题目要求(题目是找任意两个不同下标的元素和为target),比如测试用例里1+4=5的解会被漏掉。
这里提供两种常见的修正方案:
方案一:暴力枚举(简单直观)
遍历所有两两组合的下标,找到符合条件的对:
def twosum(nums, target): n = len(nums) for i in range(n): for j in range(i+1, n): if nums[i] + nums[j] == target: print("Output:", i, j) return # 找到唯一解后直接返回
方案二:哈希表(时间复杂度O(n),更高效)
用字典存储已遍历元素的下标,遍历每个元素时检查target - 当前元素是否在字典中:
def twosum(nums, target): num_map = {} for idx, num in enumerate(nums): complement = target - num if complement in num_map: print("Output:", num_map[complement], idx) return num_map[num] = idx
4. 优化驱动代码
不需要单独传递size参数,函数内部可以通过len(nums)获取数组长度,简化调用逻辑:
# Driver Code nums = [] n = int(input("Enter the size of array:")) for _ in range(n): nums.append(int(input("Enter the array element: \t"))) print("Entered array:\t", nums) target = int(input("Enter the sum to be find:")) twosum(nums, target)
完整修正后的代码示例(暴力枚举版)
# Two Sum Function def twosum(nums, target): n = len(nums) for i in range(n): for j in range(i + 1, n): if nums[i] + nums[j] == target: print("Output:", i, j) return # Driver Code nums = [] n = int(input("Enter the size of array:")) for _ in range(n): nums.append(int(input("Enter the array element: \t"))) print("Entered array:\t", nums) target = int(input("Enter the sum to be find:")) twosum(nums, target)
内容的提问来源于stack exchange,提问作者Shakti Sahoo
相关产品推荐
相关产品推荐

