leetcode毎日ブラシタイトルプラン--day62

異なるパスのNUM 62 NUM 63の異なるパス&& ||

二つの質問は、動的計画法に基づいている、常に可能な問題に注意を求めていることはノード合計に思われます

データ範囲は、100×100であるが、爆発intの結果である可能性があり、長い発現が

複数のフィルタ条件の障壁があります。

コードは以下の通りです

クラス解決{
 パブリックint型 uniquePaths(INT M、INT N){
         int型の DP [ 105 ] [ 105 ]。
        memsetの(DP、0はsizeof (DP))。
        DP [ 1 ] [ 1 ] = 1 以下のためにINT iが= 1 ; I <; = M I ++ 
        { 
            ためINT J = 1 ; J <= N J ++ 
            { 
                場合(I> = 2 = && J>2 
                DP [I] [J] = DP [I- 1 ] [J] + DP [I]、[J- 1 ]。
                そう であれば(I> = 2 
                DP [I] [J] = DP [I- 1 ] [J]。
                そう であれば(j> = 2 
                DP [I] [J] = DP [I]、[J- 1 ]。
                // coutの<< "私: "<< I <<" J: "<< J <<" DP [I] [J]:" << DP [I] [J] <<てendl; 
            } 
        } 
        戻りDP [M] [N]。
    } 
}。
62
クラス解決{
 パブリックint型 uniquePathsWithObstacles(ベクトル<ベクトル< INT >>&obstacleGrid){
         int型、M = obstacleGrid.size()。
        INT、N = obstacleGrid [ 0 ] .size()。
        もし(obstacleGrid [M- 1 ] [N- 1 ] == 1戻り 0 ; 
        長い DP [ 105 ] [ 105 ]。
        memsetの(DP、0はsizeof (DP))。
        DP [ 1 ] [ 1 ] =1 ;
        以下のためにINT iは= 1 ; I <= M; I ++ 
        { 
            ためINT J = 1 ; J <= nであり、j ++ 
            { 
                場合(I == 1 && J == 1 続けますもし(obstacleGrid [I- 1 ] [J- 1 ] == 1 
                { 
                    DP [I] [J] = - 1 続け; 
                } 
                もし(I> = 2&& J> = 2 && obstacleGrid [I- 2 ] [J- 1 ]!= 1 && obstacleGrid [I- 1 ] [J- 2 ]!= 1 
                { 
                    DP [I] [J] = DP [I- 1 ] [J] + DP [I]、[J- 1 ]。
                } 
                そう なら(I> = 2 && obstacleGrid [I- 2 ] [J- 1 ] =!1 
                { 
                    DP [I] [J] = DP [I- 1 ] [J]。
                } 
                それ以外の 場合(J> = 2&& obstacleGrid [I- 1 ] [J- 2!] = 1 
                { 
                    DP [I] [J] = DP [I]、[J- 1 ]。
                } 
            } 
        } 
        戻りDP [M] [N]。
    } 
}。
63

 

おすすめ

転載: www.cnblogs.com/tingxilin/p/12005156.html