980. Unique Paths III

题目来源:
 https://leetcode.com/problems/unique-paths-iii/
自我感觉难度/真实难度:
 
题意:
 
分析:

 回溯法,直接DFS就可以了

自己的代码:
class Solution:
    def uniquePathsIII(self, grid: List[List[int]]) -> int:
        res=0
        n=len(grid)
        m=len(grid[0])
        for i in range(n):
            for j in range(m):
                if grid[i][j]==1:
                    start_i,start_j=i,j
                if grid[i][j]==2:
                    end_i,end_j=i,j
        def dfs(grid,k,l):
            if grid[k][l]==-1:
                return 
            if grid[k][l]==2:
                for i in range(n):
                    for j in range(m):
                        if grid[n][m]==0:
                            return
                res+=1
                return 
            grid[k][l]=-1    
            left,right,up,down=l-1,l+1,k-1,k+1
            if left>=0:
                dfs(grid,k,left)
            if right<=m:
                dfs(grid,k,right)
            if up>=0:
                dfs(grid,up,l)
            if down<=n:
                dfs(grid,down,l)
        dfs(grid,start_i,start_j)
        return res
            
代码效率/结果:

虽然有思路,但是写出来的代码细节通不过,注意退回去的时候

优秀代码:
代码效率/结果:
 
自己优化后的代码:
 
反思改进策略:

1.函数输入变量设计的时候,我们要的是输入每次不同的东西。如果是全局的东西,我们可以不当作输入变量

2.回溯法,如果需要改变全局变量的值,那么从DFS后面回去的时候,要改回来!!!

写题时间时长:
原文地址:https://www.cnblogs.com/captain-dl/p/10476019.html