func solveNQueens(n int) [][]string {	var number int                                     // 棋盘大小	var board [][]int                                  // 棋盘	var res [][]string                                 // 返回结果	var initBoard func(int)                            // 初始化棋盘	var isValid func(board [][]int, row, col int) bool // 判断是否可放置皇后	var solution func(board [][]int, row int)          // 解决方案
	// 初始化棋盘	initBoard = func(i int) {		for i := 0; i < number; i++ {			tmp := []int{}			for j := 0; j < number; j++ {				tmp = append(tmp, 0)			}			board = append(board, tmp)		}	}
	// 判断是否能放置皇后	isValid = func(board [][]int, row, col int) bool {		for i := row - 1; i >= 0; i-- {			if board[i][col] == 1 {				return false			}		}
		j := col + 1		for i := row - 1; i >= 0; i-- {			if j >= number {				break			}			if board[i][j] == 1 {				return false			}			j++		}
		j = col - 1		for i := row - 1; i >= 0; i-- {			if j < 0 {				break			}			if board[i][j] == 1 {				return false			}			j--		}
		return true	}
	// 寻找解决方案	solution = func(board [][]int, row int) {		if row == number { // 触发结束条件			tmp := []string{}			for i := 0; i < number; i++ {				str := ""				for j := 0; j < number; j++ {					if board[i][j] == 0 {						str += "."					} else {						str += "Q"					}				}				tmp = append(tmp, str)			}			res = append(res, tmp)			return		}
		// 寻找解决方案		for col := 0; col < number; col++ {			// 排除不合法选项			if !isValid(board, row, col) {				continue			}
			board[row][col] = 1    // 做选择			solution(board, row+1) // 执行下个决策树			board[row][col] = 0    // 撤销选择		}	}
	number = n	initBoard(number)	solution(board, 0)
    return res}
评论