leetcode-999

这题看懂题意没难度,但是有没有更好的非步进迭代思路呢,比如一个棋盘巨大的那种,按方向迭代就显得有些低效了。看了提交的代码没发现比较好的思路,首先是不是能在找白棋的步骤简化一些,这里的问题是必须要xy同时满足才能确定白棋坐标,那我想能否用大范围的rand思路配合多指针,毕竟如果是一亿行列的棋盘,这种时间复杂度肯定会爆掉。找到白棋后再直接开多个协程去吃棋子。

原始版本

package main

func numRookCaptures(board [][]byte) int {
    dx := []int{-1, 1, 0, 0}
    dy := []int{0, 0, -1, 1}

    for i := 0; i < 8; i++ {
        for j := 0; j < 8; j++ {
            if board[i][j] == 'R' {
                res := 0
                for k := 0; k < 4; k++ {
                    x := i
                    y := j
                    for {
                        x += dx[k]
                        y += dy[k]
                        if x < 0 || x >= 8 || y >= 8 || y < 0 || board[x][y] == 'B' {
                            break
                        }
                        if board[x][y] == 'p' {
                            res++
                            break
                        }
                    }
                }
                return res
            }
        }
    }
    return 0
}

end

猜你喜欢

转载自www.cnblogs.com/CherryTab/p/12578041.html
999
今日推荐