幅優先探索(BFS)-279話題のLeetcode。パーフェクト広場(パーフェクト四角)
BFS詳細なエントリ:幅優先探索(BFS)テーマ別-429トラバーサル順序N-ツリー(N進ツリー上位のオーダートラバーサルのLeetcode )。
正の整数を考えると N-、(例えば、いくつかの完璧な正方形のを発見した 1, 4, 9, 16, ...
彼らの合計が等しくなるように) は、n-。少なくとも、あなたは数と組成の完全な方形を作成する必要があります。
例1:
入力:N- =12
出力:3 説明:12 = 4 + 4 + 4.
例2:
入力:N- =13
出力:2 説明:13 = 4 + 9.
問題への解決策からこのトピックやアイデアは、この問題は、我々は問題解決の観点から、理解するのに役立ちます地図の下に与えられ、解決するための理論をグラフに変換することができます。
0、ダイレクトリターン発見された彼は最短であるため、導入VISマーク番号は、もはや最初の結果を計算するために追加されたキューに追加されます。
前VIS = 1人の代表を繰り返し計算、唯一のパスの長さが長くなる以前よりも、直接数値をスキップして計算されている場合は、その計算されたため、不要な計算を回避VIS導入。
絵の上に輝く、自分の擬似コードを記述し、その後、理解を助けるために、コードの擬似コードを変換しようとすることができます。
クラスのソリューション{ プライベート クラスノード{ int型のval; int型のステップ; パブリックノード(int型のval、int型工程){ この .val = ヴァル。 この。ステップ= ステップと } } 公共 のint numSquares(int型N){ キュー <ノード>キュー= 新しい LinkedListの<> (); INT [] VIS = 新しい INT [N + 1 ]。 queue.offer(新ノード(N、0 )); 一方、(!queue.isEmpty()){ ノードTEMP = queue.poll()。 int型 NUM = temp.val。 int型のステップ= temp.step。 以下のために(int型 I = 1 ;; I ++ ){ int型のval = NUMを-私は* Iと、 もし(ヴァル<0 ){ 破ります。 } であれば(ヴァル== 0 ){ 戻り工程+ 1 。 } もし(VIS [ヴァル] == 0){ VIS [ヴァル] = 1 。 queue.offer(新しいノード(ヴァル、ステップ+ 1 ))。 } } } 戻り -1 。 } }