LeetcodeMedium- [インタビューの質問12.マトリックス内のパス]

行列内にある文字列のすべての文字を含むパスがあるかどうかを判断する関数を設計してください。パスはマトリックス内の任意のグリッドから開始でき、各ステップで1つのグリッドをマトリックス内の左、右、上、下に移動できます。パスがマトリックスのグリッドを通過する場合、パスはグリッドに再び入ることができません。たとえば、次の3×4マトリックスには、文字列「bfce」のパスが含まれています(パス内の文字は太字でマークされています)。

[["a"、 "b"、 "c"、 "e"]、
["s"、 "f"、 "c"、 "s"]、
["a"、 "d"、 "e"、 "e"]]

ただし、マトリックスには文字列「abfb」のパスが含まれていません。これは、ストリングの最初の文字bがマトリックスの最初の行の2番目のグリッドを占めた後、パスがこのグリッドに再び入ることができないためです。

 

例1:

输入:board = [["A"、 "B"、 "C"、 "E"]、["S"、 "F"、 "C"、 "S"]、["A"、 "D"、 "E"、 "E"]]、word = "ABCCED"
输出:true


例2:

输入:board = [["a"、 "b"]、["c"、 "d"]]、word = "abcd"
输出:false


ヒント:

1 <= board.length <= 200
1 <= board [i] .length <= 200
注:この質問はメインステーション79の質問と同じです:https : //leetcode-cn.com/problems/word-search/

出典:LeetCode(LeetCode)
リンク:https ://leetcode-cn.com/problems/ju-zhen-zhong-de-lu-jing-lcof
著作権は控除ネットワークに属しています。商用転載の正式な許可書に連絡し、非商用転載の出典を明記してください。

アイデア:ディープサーチ(dfs)

最初に配列を走査し、各点を始点として試し、次に始点のすべての方向から検索を開始して、パスが見つかるかどうかを確認します。

class Solution:
    def exist(self, board: List[List[str]], word: str) -> bool:
        if board == [] or board == [[]]:
            return False 
        # 标记该点是否在本次路径中搜索过
        self.visit = [[0]*len(board[0]) for _ in range(len(board))]
        # 每个点的周边点,分别为x,y的变化值
        self.dx = [0, 0, 0, 1, -1]
        self.dy = [0, 1, -1, 0, 0]
        self.board = board
        self.word = word
        for i in range(len(board)):
            for j in range(len(board[0])):
                rt = self.dfs(i, j, 0)
                if rt == True:
                    return True
        return False
    def dfs(self, x, y, cnt):
        if cnt == len(self.word):
            return True
        for i in range(len(self.dx)):
            xx = x + self.dx[i]
            yy = y + self.dy[i]
            if xx >= 0 and xx < len(self.board) and yy >= 0 and yy < len(self.board[0]) and self.visit[xx][yy] == 0:
                if self.board[xx][yy] == self.word[cnt]:
                    self.visit[xx][yy] = 1
                    # print(xx, yy)
                    rt = self.dfs(xx, yy, cnt+1)
                    if rt == True:
                        return True
                    self.visit[xx][yy] = 0
        return False

 

公開された314元の記事 ウォン称賛22 ビュー20000 +

おすすめ

転載: blog.csdn.net/qq_39451578/article/details/105385140