79.单词搜索

在这里插入图片描述
在这里插入图片描述
回溯

class Solution:
    def exist(self, board: List[List[str]], word: str) -> bool:
        self.res = False
        self.col, self.row = len(board[0]), len(board)
        flag = [[False]*self.col  for _ in range(self.row)] # 标记矩阵,看有没有使用过
        self.board = board
        def backtrack(i,j,flag, word): #flag矩阵标记此次的使用状况,word是还剩下需要找的字符串
            if len(word) == 0:
                self.res = True
                return
            if self.res == True: return
			# 这部分可以写个4*2的数组来优化下
            if i-1 >= 0 and flag[i-1][j] == False and self.board[i-1][j] == word[0]:# 目前位置的左边没用过,并且跟下一个单词相同
                flag[i-1][j] = True
                backtrack(i-1,j, flag, word[1:]) 
                flag[i-1][j] = False # flag的状态回溯
            if j-1 >= 0 and flag[i][j-1] == False and self.board[i][j-1] == word[0]:# 目前位置的上边没用过,并且跟下一个单词相同
                flag[i][j-1] = True 
                backtrack(i,j-1, flag, word[1:])
                flag[i][j-1] = False 
            if j+1 < self.col and flag[i][j+1] == False and self.board[i][j+1] == word[0]:# 目前位置的右边没用过,并且跟下一个单词相同
                flag[i][j+1] = True
                backtrack(i,j+1, flag, word[1:])
                flag[i][j+1] = False 
            if i+1 < self.row and flag[i+1][j] == False and self.board[i+1][j] == word[0]:# 目前位置的下边没用过,并且跟下一个单词相同
                flag[i+1][j] = True
                backtrack(i+1,j, flag, word[1:])
                flag[i+1][j] = False

        for i in range(self.row):
            for j in range(self.col):
                if board[i][j] == word[0]: # 从第一个字母开始,找到起始位置
                    flag[i][j] = True 
                    backtrack(i, j, flag, word[1:])
                    flag[i][j] = False

        return self.res

在这里插入图片描述
竟然过了嘻嘻

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值