1536. 排布二进制网格的最少交换次数

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
}