Python 写力扣每日一题时遇到的困惑

查看 48|回复 2
作者:vthe   
下面两种代码基本是一样的,但是第一种会出现错误的答案。
在写这种 bfs 之类的题目时,我经常会遇到这个问题。
其实我大概知道原因,就是变量自动变了,但还是很困惑,不知道到底是哪里变的。
class Solution:
    def pondSizes(self, land: List[List[int]]) -> List[int]:
        m = len(land)
        n = len(land[0])
        
        res = []
        for i,row in enumerate(land):
            for j, v in enumerate(row):
                if v == 0:
                    q = [(i,j)]
                    land[i][j] = 1
                    cnt = 1
                    while q:
                        # print(q)
                        tmp = q
                        q = []
                        for (i,j) in tmp:
                            for dx in range(-1,2):
                                for dy in range(-1,2):
                                    if dx == dy == 0:
                                        continue
                                    x = i + dx
                                    y = j + dy
                                    if 0
class Solution:
    def pondSizes(self, land: List[List[int]]) -> List[int]:
        m = len(land)
        n = len(land[0])
        def bfs(i,j):
            q = [(i,j)]
            land[i][j] = 1
            cnt = 1
            while q:
                # print(q)
                tmp = q
                q = []
                for (i,j) in tmp:
                    for dx in range(-1,2):
                        for dy in range(-1,2):
                            if dx == dy == 0:
                                continue
                            x = i + dx
                            y = j + dy
                            if 0

land, cnt, res, for

NoOneNoBody   
定义域
第一个的 for (i,j) in tmp 这句
换其他变量,如 ii, jj ,当然循环内也要跟着换
NoOneNoBody   
补充:
在 bfs(i,j),land[i][j] = 1 这句后,i,j 的传参工作就完成了,后面 for 重新定义复用 i,j 并不影响计算
但在第一例,for (i,j) in tmp 的 i,j 是影响外部循环的 i,j 的
您需要登录后才可以回帖 登录 | 立即注册

返回顶部