Leetcode 79. Word Search

本文详细解析了LeetCode 79 Word Search问题的解决策略,采用深度优先搜索(DFS)算法,通过遍历矩阵并进行剪枝优化,实现了高效的单词查找。文章提供了完整的Python代码实现,并讨论了边界条件、遍历去重及剪枝技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:在图中搜索给定单词,如果存在就返回True否则为False.

题目链接:Leetcode 79. Word Search

思路:dfs搜索,一旦不符合条件就退出,直到符合条件。有矩阵的题目,要么是利用dfs、bfs遍历、要么就是动态规划找出递推条件。考虑遍历去重,visited、边界问题、合理剪枝,一旦达到目的就暂停。

代码如下

class Solution:
    def exist(self,board, word):
        """
        :type board: List[List[str]]
        :type word: str
        :rtype: bool
        """
        if not word:
            return True
        if not board:
            return False
        self.m = len(board)
        self.n = len(board[0])
        self.ans = False
        
        for i in range(self.m):
            for j in range(self.n):
                if self.ans:
                    return True
                if board[i][j]==word[0]:
                    self.dfs(i,j,board,word[1:],[(i,j)])
        return self.ans
        
    def dfs(self,i,j,board,word,visited):
        
        if word == "" or self.ans:
            self.ans = True
            return 
        d = [[0,1],[0,-1],[1,0],[-1,0]]
        for p,q in d:
            x,y = p+i,j+q
            if self.ans:
                return
            if  0 <= x < self.m and  0<= y < self.n and (x,y) not in visited:
                 if board[x][y] == word[0]:    
                    self.dfs(x,y,board,word[1:],visited+[(x,y)])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值