幅優先探索(BFS)-279話題のLeetcode。パーフェクト広場(パーフェクト四角)

幅優先探索(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 
    } 
}

 

おすすめ

転載: www.cnblogs.com/qinyuguan/p/11441570.html