You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何将普通双函数代码改写为LeetCode要求的类提交格式

LeetCode 200 岛屿数量 提交代码改写方案

原代码封装失败原因

原双函数写法用函数属性做跨函数变量共享,直接套入类模板时会出现三类报错:

  • 类的实例方法默认第一个参数必须为self,直接照搬函数定义会丢失实例上下文
  • 类内部方法互相调用必须加self.前缀,裸调用DFS会触发名称未定义错误
  • 原代码直接引用全局grid变量的写法,在LeetCode的类提交环境下无法正确获取输入值

符合提交规范的可运行代码

class Solution(object):
    def numIslands(self, grid):
        """
        :type grid: List[List[str]]
        :rtype: int
        """
        self.m = len(grid)
        self.n = len(grid[0]) if self.m > 0 else 0
        self.visited = [[False for _ in range(self.n)] for _ in range(self.m)]
        self.myStack = []
        self.islandCnt = 0
        self.grid = grid

        for i in range(self.m):
            for j in range(self.n):
                if grid[i][j] == "1" and not self.visited[i][j]:
                    self.islandCnt += 1
                    self.DFS(i, j)
        
        return self.islandCnt
    
    def DFS(self, i, j):
        shift = 0
        self.visited[i][j] = True
        self.myStack.append((i, j))

        adjacent = [(i, j-1), (i, j+1), (i-1, j), (i+1, j)]
        for ele in adjacent:
            ni, nj = ele[0], ele[1]
            if 0 <= ni <= self.m -1 and 0 <= nj <= self.n -1 and not self.visited[ni][nj] and self.grid[ni][nj] == '1':
                shift = 1
                self.DFS(ni, nj)
        
        if shift == 0:
            Recent = self.myStack.pop()
            if len(self.myStack) != 0:
                self.myStack.pop()
                self.DFS(Recent[0], Recent[1])

改写逻辑说明

  • 完全保留原有DFS遍历、栈回溯、计数逻辑,没有修改核心算法思路
  • 所有跨方法共享的变量(网格尺寸、访问标记数组、栈、计数器、输入网格本身)都绑定到实例属性self上,替代原来的函数属性共享方式
  • 辅助方法DFS作为类的内部方法定义,所有递归调用、变量访问都通过self完成上下文传递
  • 增加了空网格的边界判断,避免输入为空时触发索引越界错误

内容的提问来源于stack exchange,提问作者Junyeong Ahn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 17:42:42