
Code
func minSwaps(grid [][]int) int {
n, ans := len(grid), 0
for i := 0; i < n; i++ {
need := n - i - 1
found := -1
for j := i; j < n; j++ {
if count(grid[j]) >= need {
found = j
break
}
}
if found == -1 {
return -1
}
for k := found; k > i; k-- {
ans++
grid[k], grid[k - 1] = grid[k - 1], grid[k]
}
}
return ans
}
func count(row []int) int {
n := len(row)
for i := n - 1; i > 0; i-- {
if row[i] == 1 {
return n - i - 1
}
}
return n
}