LeetCode运行两数之和代码遇ValueError:int()无法转换非十进制字面量
问题原因及解决办法
这不是LeetCode的问题,是你的输入处理逻辑和LeetCode的输入格式不匹配导致的。
错误根源
- 本地IDLE运行时,你输入的是空格分隔的数字(比如
2 7 11 15),用input().split(" ")分割后能得到单个数字字符串,转int没问题。 - 但LeetCode的输入是带方括号和逗号的列表格式字符串(比如
[2,7,11,15]),此时input().split(" ")会把整个[2,7,11,15]当成一个元素,转int时自然会报错,因为这个字符串不是合法的十进制数字。
修正步骤
- 调整输入处理逻辑,适配LeetCode的列表格式输入:
# 处理nums输入:去掉首尾方括号,按逗号分割后转int nums_input = input().strip() nums_str = nums_input[1:-1] # 去掉[] nums = list(map(int, nums_str.split(','))) if nums_str else [] target = int(input())
- 修复函数的其他问题:
- 你的
twosum函数存在缩进错误,且没有返回值(LeetCode要求返回符合条件的索引列表); - 调用函数时的
s.twosum是错误的,直接调用twosum(nums, target)即可。
- 你的
修正后的完整示例代码:
def twosum(nums, target): num_map = {} for i, num in enumerate(nums): complement = target - num if complement in num_map: return [num_map[complement], i] num_map[num] = i return [] # 适配LeetCode输入格式的处理 nums_input = input().strip() nums_str = nums_input[1:-1] nums = list(map(int, nums_str.split(','))) if nums_str else [] target = int(input()) result = twosum(nums, target) print(result)
内容的提问来源于stack exchange,提问作者man
相关产品推荐
相关产品推荐

