fun changeRowColumn(matrix: Array<IntArray>, row: Int, col: Int) {
val rows = matrix.size
val cols = matrix[0].size
for (j in 0 until cols) {
if (matrix[row][j] != 0) {
matrix[row][j] = -1
}
}
for (i in 0 until rows) {
if (matrix[i][col] != 0) {
matrix[i][col] = -1
}
}
}
fun changeBinaryMatrix(matrix: Array<IntArray>) {
val rows = matrix.size
if (rows == 0) return
val cols = matrix[0].size
if (cols == 0) return
// First pass: record zero positions
val zeroPositions = mutableListOf<Pair<Int, Int>>()
for (i in 0 until rows) {
for (j in 0 until cols) {
if (matrix[i][j] == 0) {
zeroPositions.add(Pair(i, j))
}
}
}
// Mark rows and columns based on zero positions
for ((i, j) in zeroPositions) {
changeRowColumn(matrix, i, j)
}
// Second pass: clean up
for (i in 0 until rows) {
for (j in 0 until cols) {
if (matrix[i][j] == -1) {
matrix[i][j] = 0
}
}
}
}
fun printMatrix(matrix: Array<IntArray>) {
for (row in matrix) {
println(row.joinToString(" "))
}
}
fun main() {
val matrix = arrayOf(
intArrayOf(1, 1, 0, 1, 1, 1),
intArrayOf(1, 1, 1, 1, 1, 1),
intArrayOf(1, 1, 0, 1, 1, 1),
intArrayOf(1, 1, 1, 1, 1, 1),
intArrayOf(1, 0, 1, 1, 1, 1)
)
changeBinaryMatrix(matrix)
printMatrix(matrix)
}
/*
run:
0 0 0 0 0 0
1 0 0 1 1 1
0 0 0 0 0 0
1 0 0 1 1 1
0 0 0 0 0 0
*/