あなたがこれらの3つの値で初期化された2Dグリッドamxn与えられています。
-1
-壁や障害物。0
-ゲート。INF
-インフィニティは、空室を意味します。私たちは、値を使用し 2^31 - 1 = 2147483647
ますが、ゲートまでの距離がより小さいことを想定することができるようINFを表現するために 2147483647
。
その最も近いゲートまでの距離にそれぞれの空室を埋めます。それが到達することは不可能である場合は Gate
、その部屋はで満たされたままにしてください INF
例
例1
Input:
[[2147483647,-1,0,2147483647],[2147483647,2147483647,2147483647,-1],[2147483647,-1,2147483647,-1],[0,-1,2147483647,2147483647]]
Output:
[[3,-1,0,1],[2,2,1,-1],[1,-1,2,-1],[0,-1,3,4]]
Explanation:
the 2D grid is:
INF -1 0 INF
INF INF INF -1
INF -1 INF -1
0 -1 INF INF
the answer is:
3 -1 0 1
2 2 1 -1
1 -1 2 -1
0 -1 3 4
例2
Input: [[0,-1],[2147483647,2147483647]] Output: [[0,-1],[1,2]]
パブリック クラスソリューション{ / ** * @paramの部屋:MXN 2Dグリッド * @return :何が * / パブリック 無効 wallsAndGates(INT [] []部屋){ // ここにコードの書き込み キューを<セル>キュー= 新しい LinkedListの<> (); INT行= rooms.length。 int型 COL =部屋[0 ] .LENGTH。 以下のために(INT I 0 =; I <行; I ++ ){ ため(INT J = 0; J <COL、J ++){ 場合(客室[I] [J] == 0 ){ // J => COLへのIに対応X =>行、Y対応 // 最小点から開始 queue.offer(新しいセル(I、J 、部屋[i]は[J])); } } } INT [] []方向= 新しい INT [] [] {{ - 1,0}、{1,0}、{0、-1}、{0,1 }}。 一方、(!queue.isEmpty()){ 細胞CUR = queue.poll()。 以下のための(int型[] DIR:方向){ int型 newX = cur.x + DIR [0 ]。 INT newY = cur.y + DIR [1 ]。 もし(newX> = 0 && newX <行&& newY> = 0 && newY <COL &&ルーム[newX] [newY] == Integer.MAX_VALUEの){ ルーム[newX] [newY] = cur.val + 1 。 queue.offer(新しいセル(newX、newY、部屋[newX] [newY])); } } } } } クラス細胞{ int型のX。 int型のy; int型のval; 公衆細胞(int型のx、int型 Y、INT ヴァル){ この .X = X。 この .Y = Y。 この .val = valの; } }