トピック:
アルゴリズム、M×Nの行列要素である0の製造は、それは、行と列クリアされます。
例1:
入力
:
[ [1,1,1]、
[1,0,1]、
[1,1,1]
]
出力
:
[ [1,0,1]、
[0,0,0]、
[0 、1]
]
実施例2:
入力
:
[ [0,1,2,0]、
[3,4,5,2]、
[1,3,1,5]
]
出力
:
[ [0,0,0,0]、
[0,4 、5,0]、
[0,3,1,0]
]
分析:
最初の行0を検索し、そうでない場合、同じ時間が必要で、各横断行の後に空行を格納するために、このラインのニーズを直接クリアすることができ、その後標線に転用クリアします。
手順:
クラスソリューション{ 公共 ボイド setZeroes(INT [] []行列){ int型の行= -1 。 ブール delr = 偽; 以下のために(INT I 0 =; I <matrix.length; ++ I){ ため(INT J = 0; J <行列[I] .LENGTH; ++ J){ 場合(行列[I] [J] == 0 ){ 列 = I。 休憩; } } もし(行!= -1 ) 休憩; } 場合(行が== -1 ) を返します。 以下のために(INT I 0 =; I <matrix.length; ++ I){ ため(INT J = 0; J <行列[I] .LENGTH; ++ J){ 場合(行列[I] [J] == 0 ){ delr = 真。 行列[行] [j] = 0 ; } } もし(i =行&&!delr){ ための(int型のk = 0; K <行列[I] .LENGTH; ++K){ 行列[I] [K] = 0 ; } } delr = 偽。 } のための(INT I = 0、I <行列[行] .LENGTH; ++ I){ 場合(行列[行] [I] == 0 ){ ための(int型 J = 0; J <matrix.length; + + J){ 行列[J] [I] = 0 ; } } 他{ 行列[行] [I] = 0 ; } } } }