zoukankan      html  css  js  c++  java
  • [LeetCode]题解(python):079-Word Search

    题目来源:

      https://leetcode.com/problems/word-search/


    题意分析:

      给定一个子表板和一个一个词,返回这个词是否在子表版上。子表板之间只能水平和垂直相连,子表板中的字符只能访问一次。


    题目思路:

      这是一个典型的深度优先搜索。首先找到第一个字符,从这个字符开始进行深度优先搜索,搜索的时候要记得把已经搜索的记录为true。


    代码(Python):

      

     1 class Solution(object):
     2     def exist(self, board, word):
     3         """
     4         :type board: List[List[str]]
     5         :type word: str
     6         :rtype: bool
     7         """
     8         l = len(word)
     9         if l == 0:
    10             return False
    11         m = len(board)
    12         if m == 0: return False
    13         n = len(board[0])
    14         visit = [[False for i in range(n)] for j in range(m)]
    15         def dfs(x,y,word):
    16             if len(word) == 0: return True
    17             if x > 0 and not visit[x-1][y] and board[x - 1][y] == word[0]:
    18                 visit[x - 1][y] = True
    19                 if dfs(x - 1,y,word[1:]):
    20                     return True
    21                 visit[x - 1][y] = False
    22             if y > 0 and not visit[x][y-1] and board[x][y-1] == word[0]:
    23                 visit[x][y-1] = True
    24                 if dfs(x,y-1,word[1:]):
    25                     return True
    26                 visit[x][y-1] = False
    27             if x + 1< m and not visit[x+1][y] and board[x+1][y] == word[0]:
    28                 visit[x+1][y] = True
    29                 if dfs(x+1,y,word[1:]):
    30                     return True
    31                 visit[x+1][y] = False
    32             if y + 1 < n and not visit[x][y + 1] and board[x][y + 1] == word[0]:
    33                 visit[x][y + 1] = True
    34                 if dfs(x,y + 1,word[1:]):
    35                     return True
    36                 visit[x][y + 1] = False
    37             return False
    38         for i in range(m):
    39             for j in range(n):
    40                 if board[i][j] == word[0]:
    41                     visit[i][j] = True
    42                     if dfs(i,j,word[1:]):
    43                         return True
    44                     visit[i][j] = False
    45         return False
    46             
    View Code

    转载请注明出处:http://www.cnblogs.com/chruny/p/5088549.html 

  • 相关阅读:
    HTTP协议
    MySQL建立主-从服务器双机热备配置
    centOS7安装配置mysql5.7.21
    修改docker镜像的默认存储目录
    docker--学习笔记
    MySQL数据库操作
    zabbix注意事项和常用命令
    CnentOS6.5安装zabbix2.2
    如何查询一个进程下面的线程数(进程和线程区别)
    OSPF与ACL实例
  • 原文地址:https://www.cnblogs.com/chruny/p/5088549.html
Copyright © 2011-2022 走看看