79単語検索Pythonの実現Leetcode

単語がグリッドに存在する場合、2Dボードや単語を考えると、見つけます。

単語は「隣接」セルが水平方向または垂直方向に隣接するもので順次隣接するセルの文字から構成することができます。同じ文字セルを複数回使用することはできません。

例:

ボード= 
[
[ 'A'、 'B'、 'C'、 'E']、
[ 'S'、 'F.'、 'C'、 'S']、
[ 'A'、 'D'、E」 「」E「]が
] 与えられた単語= 『ABCCEDは』、trueに戻ります。与えられた単語= 『SEE』を、trueに戻ります。与えられた単語= 『ABCB』を、falseに戻ります。





他人から借りていくつかのアイデアを検討しているコードの部分で
クラスソリューション:
     DEF存在する(セルフ、ボード:リスト[リスト[STR]、ワード:STR) - > BOOL:
        MAX_ROW = LEN(ボード)-1 
        max_col。= LEN(ボード[0]) - 1
         DEF バックトラック(行、 COL、S):
             IF LEN(S)== 0:
                 返す
            LOCSの。。。= [行×1、COL]、[+行1、COL]、[行、-col 1]、[行、+ COL 1。] ]
             #の解析であれば、DFSはTrueを返すことができる場合にtrueを返しができるように、上下ているポイント
            のために LOC LOCS:
                 IF LOC [0] <0 または LOC [0]> MAX_ROW または。LOC [1] <0 または[1]のLOC> max_col ボード[LOC [0] = [LOCの[1]。]!S [0]:
                     続行
                #のリファレンス他のコード、非アルファベット文字に現在の位置を、使用されて表し 
                [TMP =ボードLOC [0]] [。LOCの[1 ] 
                取締役会[LOC [0]] [LOCの[ 1] = " $ " 
                IFバックトラック(LOC [0]、LOCの[1]、S [1。。:]):
                     返す
                基板[LOC [0] [LOCの[ 1] = tmpに
             戻り
        
        のための R&LT におけるレンジ(LEN(ボード))
             のために C 範囲(LEN(ボード[0])):
                 IF基板[R] [C] == ワード[0]:
                    TMP = ボード[R] [C] 
                    基板[R] [C] = " $ " 
                    もしバックトラック(R、C、ワード[1 :]):
                         返す真の
                    基板[R] [C] = TMP
         戻り

 

おすすめ

転載: www.cnblogs.com/watch-fly/p/leetcode_79_watchfly.html