Golang:
思路:和51是一个问题
注意:这里需要注意下:因为不想使用list去存储所有出现的结果(会导致空间复杂度变高),所以我使用了一个全局变量totalRes
来表示单次测试的结果,但因为平台运行测试用例的机制,是会使用一段代码一次性跑多个测试用例。所以,每次运行totalNQueens
这个方法时,都需要将totalRes
置零,否则会报错。
var totalRes int
func main() {
fmt.Println(totalNQueens(1))
}
func totalNQueens(n int) int {
totalRes=0 //这里每次使用都需要置零,否则会不通过
chessboard:=make([]int,n)
placeQueen(chessboard,n,0)
return totalRes
}
func checkResult(chessboard []int,n int) bool {
for i:=0; i<n; i++ {
if chessboard[i]==chessboard[n]||math.Abs(float64(chessboard[i]-chessboard[n]))==float64(n-i){
return false
}
}
return true
}
func placeQueen(chessboard []int,max int,temp int) {
if temp==max {
totalRes++
return
}
for i:=0; i<max; i++ {
chessboard[temp]=i
if checkResult(chessboard,temp) {
placeQueen(chessboard,max,temp+1)
}
}
}
有疑问加站长微信联系(非本文作者)