LeetCode79:単語検索、および質量参加時に参照を渡すことの重要性

単語がグリッドに存在するかどうかを調べるために、二次元のグリッドと言葉を与えられました。

単語、隣接するセル内の文字のアルファベット順に構成する必要があり、水平方向または垂直方向に隣接するセルに隣接している「隣接」セル。同じセル内の文字を再利用することを許可されていません。

例:

ボード=
[
[ 'A'、 'B'、 'C'、 'E']、
[ 'S'、 'F'、 'C'、 'S']、
[ 'A'、 'D'、E ' 」、 'E']
]

与えられた単語= "ABCCEDは"、trueを返します。
単語= "SEE"を考えると、trueを返します。
単語= "ABCB"を考えると、falseを返します。

タイトルは+バック十分、実際にはDFS非常に単純な主題ですが、実行している時間のバージョンの初めには、3つのサンプルのタイムアウトの存在下で、常に次のとおりです。

クラスのソリューション{ 
パブリック:
    存在しBOOL(ベクトル<ベクトル<文字>>&ボード、文字列の単語){ 
		場合(word.size()== 0)
			falseを返します。
		用(INT列= 0、行<board.size();行++)
		{ 
			ための(int型COL = 0、COL <ボード[行] .size(); COL ++)
			{ 
				IF(コア(ボード、ワード、0、行、COL))
					trueを返します。
			} 
		} 
		falseを返します。
    } 
	ブールコア(ベクトル<ベクトル<チャー>>&辞書、文字列の単語、int型のPOS、INT列、int型COL)
	{ 
		(posが== word.size())場合に
			trueを返します。
		IF(行<0 ||行> = dict.size()|| COL <0 || COL> =辞書[行] .size()
			||辞書[行] [COL]!=ワード[POS])
			リターン偽;
		辞書[行] [COL] =」
		IF(コア(辞書、単語、POS + 1、行1、列)||コア(辞書、単語、POS + 1、行+ 1、COL)
			||コア(辞書、単語、POS + 1、行、 COL-1)||コア(辞書、単語、POS + 1、行、列+ 1))が
			trueを返します。
		falseを返します。
	} 
}。

  たびに、我々は再構築を渡すので、代わりに元の行列の行列のコピーを変更、実際の各時間伝達行列に渡されたパラメータの特性値に依存しているバックトラックのこのバージョンは、また、タイムアウトにつながりました行列。

以下のバージョンが変更され、バックに変更を使用した後に自分自身を保存するために、一時的な変数の使用に依存しているバックトラック、通過参照を使用します。

クラスのソリューション{ 
パブリック:
    存在しBOOL(ベクトル<ベクトル<文字>>&ボード、文字列の単語){ 
		場合(word.size()== 0)
			falseを返します。
		用(INT列= 0、行<board.size();行++)
		{ 
			ための(int型COL = 0、COL <ボード[行] .size(); COL ++)
			{ 
				IF(コア(ボード、ワード、0、行、COL))
					trueを返します。
			} 
		} 
		falseを返します。
    } 
	ブールコア(ベクトル<ベクトル<チャー>>&辞書、文字列&ワード、int型のPOS、INT列、int型COL)
	{ 
		場合(posが== word.size())
			trueを返します。
		IF(行<0 ||行> = dict.size()|| COL <0 || COL> =辞書[行] .size()
			||辞書[行] [COL]!=ワード[POS])
			リターン偽;
		IF(コア(辞書、単語、POS + 1、行1、列)||コア(辞書、単語、POS + 1、行+ 1、COL)
			||コア(辞書、単語、POS + 1、行、 COL-1)||コア(辞書、単語、POS + 1、行、列+ 1))が
			trueを返します。
		辞書[行] [COL] = TMP。
		falseを返します。
	} 
}。

  辞書と単語の後、時間の複雑さの99%を超えて、参照を渡すことで使用され、元のサンプルは、サンプルのタイムアウトを持っています。

話題のこの非常に複雑で、参照によって使用パスは本当に重要です

おすすめ

転載: www.cnblogs.com/lxy-xf/p/11301923.html