zoukankan      html  css  js  c++  java
  • [Swift]LeetCode980. 不同路径 III | Unique Paths III

    原文地址:https://www.cnblogs.com/strengthen/p/10295241.html 

    On a 2-dimensional grid, there are 4 types of squares:

    • 1 represents the starting square.  There is exactly one starting square.
    • 2 represents the ending square.  There is exactly one ending square.
    • 0 represents empty squares we can walk over.
    • -1 represents obstacles that we cannot walk over.

    Return the number of 4-directional walks from the starting square to the ending square, that walk over every non-obstacle square exactly once. 

    Example 1:

    Input: [[1,0,0,0],[0,0,0,0],[0,0,2,-1]]
    Output: 2
    Explanation: We have the following two paths: 
    1. (0,0),(0,1),(0,2),(0,3),(1,3),(1,2),(1,1),(1,0),(2,0),(2,1),(2,2)
    2. (0,0),(1,0),(2,0),(2,1),(1,1),(0,1),(0,2),(0,3),(1,3),(1,2),(2,2)

    Example 2:

    Input: [[1,0,0,0],[0,0,0,0],[0,0,0,2]]
    Output: 4
    Explanation: We have the following four paths: 
    1. (0,0),(0,1),(0,2),(0,3),(1,3),(1,2),(1,1),(1,0),(2,0),(2,1),(2,2),(2,3)
    2. (0,0),(0,1),(1,1),(1,0),(2,0),(2,1),(2,2),(1,2),(0,2),(0,3),(1,3),(2,3)
    3. (0,0),(1,0),(2,0),(2,1),(2,2),(1,2),(1,1),(0,1),(0,2),(0,3),(1,3),(2,3)
    4. (0,0),(1,0),(2,0),(2,1),(1,1),(0,1),(0,2),(0,3),(1,3),(1,2),(2,2),(2,3)

    Example 3:

    Input: [[0,1],[2,0]]
    Output: 0
    Explanation: 
    There is no path that walks over every empty square exactly once.
    Note that the starting and ending square can be anywhere in the grid. 

    Note:

    1. 1 <= grid.length * grid[0].length <= 20

    在二维网格 grid 上,有 4 种类型的方格:

    • 1 表示起始方格。且只有一个起始方格。
    • 2 表示结束方格,且只有一个结束方格。
    • 0 表示我们可以走过的空方格。
    • -1 表示我们无法跨越的障碍。

    返回在四个方向(上、下、左、右)上行走时,从起始方格到结束方格的不同路径的数目,每一个无障碍方格都要通过一次。 

    示例 1:

    输入:[[1,0,0,0],[0,0,0,0],[0,0,2,-1]]
    输出:2
    解释:我们有以下两条路径:
    1. (0,0),(0,1),(0,2),(0,3),(1,3),(1,2),(1,1),(1,0),(2,0),(2,1),(2,2)
    2. (0,0),(1,0),(2,0),(2,1),(1,1),(0,1),(0,2),(0,3),(1,3),(1,2),(2,2)

    示例 2:

    输入:[[1,0,0,0],[0,0,0,0],[0,0,0,2]]
    输出:4
    解释:我们有以下四条路径: 
    1. (0,0),(0,1),(0,2),(0,3),(1,3),(1,2),(1,1),(1,0),(2,0),(2,1),(2,2),(2,3)
    2. (0,0),(0,1),(1,1),(1,0),(2,0),(2,1),(2,2),(1,2),(0,2),(0,3),(1,3),(2,3)
    3. (0,0),(1,0),(2,0),(2,1),(2,2),(1,2),(1,1),(0,1),(0,2),(0,3),(1,3),(2,3)
    4. (0,0),(1,0),(2,0),(2,1),(1,1),(0,1),(0,2),(0,3),(1,3),(1,2),(2,2),(2,3)

    示例 3:

    输入:[[0,1],[2,0]]
    输出:0
    解释:
    没有一条路能完全穿过每一个空的方格一次。
    请注意,起始和结束方格可以位于网格中的任意位置。 

    提示:

    1. 1 <= grid.length * grid[0].length <= 20

    32ms

     1 class Solution {
     2     var zero:Int = 0
     3     var ans:Int = 0
     4     func uniquePathsIII(_ grid: [[Int]]) -> Int {
     5         var start1:Int = 0
     6         var start2:Int = 0
     7         for i in 0..<grid.count
     8         {
     9             for j in 0..<grid[0].count
    10             {
    11                 if grid[i][j] == 0
    12                 {
    13                     zero += 1
    14                 }
    15                 if grid[i][j] == 1
    16                 {
    17                     start1 = i
    18                     start2 = j
    19                 }
    20             }            
    21         }
    22         var visited:[[Int]] = [[Int]](repeating:[Int](repeating:0,count:grid[0].count),count:grid.count)
    23         dfs(grid, start1, start2, visited, 0)
    24         return ans
    25     }
    26     
    27     func dfs(_ grid: [[Int]],_ i:Int,_ j:Int,_ visited: [[Int]],_ count:Int)
    28     {
    29         var  visited = visited
    30         if i < 0 || i >= grid.count || j < 0 || j >= grid[0].count || visited[i][j] == 1 || grid[i][j] == -1
    31         {
    32             return
    33         }
    34         if grid[i][j] == 2
    35         {
    36             if count == zero + 1
    37             {
    38                 ans += 1
    39             }
    40             return
    41         }
    42         visited[i][j] = 1
    43         dfs(grid, i+1, j, visited, count+1)
    44         dfs(grid, i-1, j, visited, count+1)
    45         dfs(grid, i, j-1, visited, count+1)
    46         dfs(grid, i, j+1, visited, count+1)
    47         visited[i][j] = 0
    48     }
    49 }
  • 相关阅读:
    Win10 开启IIS后,访问“localhost”,报错无“C:WindowsMicrosoft.NETFramework64v4.0.30319Temporary ASP.NET Files”写访问权限
    使用pip安装Python扩展包时,如何提高速度?
    Django之路由层
    第一个Django项目
    Django简介
    DIY一个Web框架
    http协议
    Web应用和Web框架
    Python递归的经典案例
    Python修改文件的两种方法
  • 原文地址:https://www.cnblogs.com/strengthen/p/10295241.html
Copyright © 2011-2022 走看看