LeetCode(力扣) 单词搜索 python解析

LC 单词搜索

时间:2023.9.30
题目地址:单词搜索


题目介绍

1
2

题目分析

首先,确定回溯算法。一开始想到的是将所有可能的序列找出来然后在判断,是否有目标序列,这样就没有考虑剪枝,效率可能会很低,也可能会超时,所以接下来就直接介绍优化后的算法。
选定一个起点,然后上下左右四个方向进行搜索,用 i n d e x index index 来代表此时搜索的是第几个元素,并判断此时的搜到的元素是否和目标元素相同,不同则将这个方向给剪掉(还需注意越界问题)。
判断结果的条件便是 i n d e x + 1 = l e n ( w o r d ) index+1=len(word) index+1=len(word) ,当此时搜索元素为最后一个,说明此时找到了这个序列,返回 T r u e True True 即可。
剩下的便是回溯了。

代码

		def backtrack(board, i, j, index):
			# 越界和剪枝判断
            if i < 0 or i >= m or j < 0 or j >= n or board[i][j] != word[index]:
                return False
            # 判断是否满足输出结果
            if index+1 == len(word):
                return True
            # 临时存储此时的值
            temp = board[i][j]
            # 记录走过了
            board[i][j] = '.'
            # 上下左右搜索,返回最后的结果
            res = backtrack(board, i+1, j, index+1) or backtrack(board, i-1, j, index+1) or backtrack(board, i, j+1, index+1) or backtrack(board, i, j-1, index+1)
            # 返回
            board[i][j] = temp
            
            return res
        
        m = len(board)
        n = len(board[0])
        for i in range(m):
            for j in range(n):
                if backtrack(board, i, j, 0):
                    return True
        return False
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值