python leetcode 212. Word Search II

221 篇文章 2 订阅

利用字典树思想

class TrieNode:
    def __init__(self):
        self.children = {}
        self.Word = ''
class Solution:
    def findWords(self, board, words):
        """
        :type board: List[List[str]]
        :type words: List[str]
        :rtype: List[str]
        """
        m=len(board)
        if m==0: return []
        n=len(board[0])
        trie=self.buildTrie(words)
        self.res=[]
        
        for i in range(m):
            for j in range(n):
                self.DFS(board,i,j,trie)
        return self.res
        
    def DFS(self,board,i,j,trie):
        if trie.Word: 
            self.res.append(trie.Word)
            trie.Word=''
        if i<0 or i>=len(board) or j<0 or j>=len(board[0]) or not board[i][j] in trie.children:
            return 
        tmp,board[i][j]=board[i][j],'X'
        for dx,dy in zip((-1,0,1,0),(0,-1,0,1)):
            self.DFS(board,i+dx,j+dy,trie.children[tmp])
        board[i][j]=tmp
        
    def buildTrie(self,words):
        trie=TrieNode()
        for word in words:
            cur=trie
            for c in word:
                if c not in cur.children: cur.children[c]=TrieNode()
                cur=cur.children[c]
            cur.Word=word
        return trie 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值