LeetCode合并两个有序链表Python提交报Solution未定义错误咨询
为什么LeetCode要求题解必须遵循固定编写框架?
以合并两个有序链表题目为例,平台默认给出的Python代码框架如下:
# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution: def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) -> Optional[ListNode]:
有用户不理解为何必须使用类结构,自行编写了独立的mergeTwoLists函数实现逻辑,代码如下:
def mergeTwoLists(list1, list2): if len(list1) == 0 or len(list2) == 0: ans = list1 + list2 elif list1[-1] < list2[0]: ans = list1.extend(list2) elif list2[-1] < list1[0]: ans = list2.extend(list1) else: i = len(list1) - 1 j = -1 for item in list2: for x in range(i, j, -1): if item >= list1[x]: list1.insert(x+1,item) i += 1 j = x ans = list1 break return ans
提交代码时平台返回如下运行错误:
Runtime Error Message: NameError: name 'Solution' is not defined ret = Solution().mergeTwoLists(param_1, param_2) Line 50 in _driver (Solution.py) _driver() Line 61 in <module> (Solution.py) Last executed input: [1,2,4] [1,3,4]
该用户表示这段代码在本地机器运行完全正常,不清楚报错产生的原因。
问题根因说明
直接报错原因
LeetCode后台判题逻辑是固定硬编码的:判题程序会主动实例化名为Solution的类,再调用该类下与题目同名的解题方法,传入提前构造好的测试用例参数,最后比对方法返回值和标准答案是否一致。
用户提交的代码中没有定义Solution类,判题程序执行到实例化Solution的步骤时自然会抛出名称不存在的错误。
平台强制固定框架的核心原因
- 降低判题系统复杂度:所有用户提交的代码结构完全统一,判题机不需要针对不同用户自定义的函数名、入口逻辑做适配,只需要按照固定路径调用即可,能大幅减少判题逻辑分支,避免因用户代码结构差异导致的误判。
- 统一输入输出约定:每道题的参数类型、返回值类型都在框架里做了明确定义,比如这道链表题传入的参数是
ListNode类型的链表节点对象,不是Python原生的列表类型。用户自己写的针对列表的len()、索引取值、extend()、insert()等操作,即便解决了类定义的报错,也会因为参数类型不匹配无法通过测试。 - 减少无关逻辑干扰:固定框架提前预置了题目所需的数据结构定义、类型标注,用户不需要自行处理标准输入读取、输出格式化等和算法核心无关的逻辑,只需要专注实现解题逻辑即可。
本地运行正常是因为本地测试时是直接将Python原生列表作为参数传入独立函数,既没有走平台固定的类调用流程,也没有使用题目约定的链表数据结构,和平台的提交运行环境完全不一致,因此本地运行结果不能作为提交是否合规的判断依据。
内容的提问来源于stack exchange,提问作者Amin Shn
相关产品推荐
相关产品推荐

