zoukankan      html  css  js  c++  java
  • [leetcode]Word Search @ Python

    原题地址:https://oj.leetcode.com/problems/word-search/

    题意:

    Given a 2D board and a word, find if the word exists in the grid.

    The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not be used more than once.

    For example,
    Given board =

    [
      ["ABCE"],
      ["SFCS"],
      ["ADEE"]
    ]
    

    word = "ABCCED", -> returns true,
    word = "SEE", -> returns true,
    word = "ABCB", -> returns false.

    解题思路:使用dfs来搜索,为了避免已经用到的字母被重复搜索,将已经用到的字母临时替换为'#'就可以了。不知道用bfs可行否。

    代码:

    class Solution:
        # @param board, a list of lists of 1 length string
        # @param word, a string
        # @return a boolean
        def exist(self, board, word):
            def dfs(x, y, word):
                if len(word)==0: return True
                #up
                if x>0 and board[x-1][y]==word[0]:
                    tmp=board[x][y]; board[x][y]='#'
                    if dfs(x-1,y,word[1:]):
                        return True
                    board[x][y]=tmp
                #down
                if x<len(board)-1 and board[x+1][y]==word[0]:
                    tmp=board[x][y]; board[x][y]='#'
                    if dfs(x+1,y,word[1:]):
                        return True
                    board[x][y]=tmp
                #left
                if y>0 and board[x][y-1]==word[0]:
                    tmp=board[x][y]; board[x][y]='#'
                    if dfs(x,y-1,word[1:]):
                        return True
                    board[x][y]=tmp
                #right
                if y<len(board[0])-1 and board[x][y+1]==word[0]:
                    tmp=board[x][y]; board[x][y]='#'
                    if dfs(x,y+1,word[1:]):
                        return True
                    board[x][y]=tmp
                return False
                    
            for i in range(len(board)):
                for j in range(len(board[0])):
                    if board[i][j]==word[0]:
                        if(dfs(i,j,word[1:])):
                            return True
            return False
                
            
  • 相关阅读:
    推荐一个wpf&sliverlight的图表控件
    数独求解
    WPF中的 CollectionChanged事件通知
    Windows 7 任务栏之缩略图预览(Thumbnail)
    把Google HK设为IE默认的搜索引擎
    F#小记——1. Hello F#
    F#小记——2. 基本数据类型
    使用异步socket的时候需要注意memory spike
    《everytime you kissed me》的中文歌词
    我回来了o(∩_∩)o...
  • 原文地址:https://www.cnblogs.com/zuoyuan/p/3769767.html
Copyright © 2011-2022 走看看