写点什么

51. N 皇后

作者:方勇(gopher)
  • 2022 年 3 月 28 日
  • 本文字数:1140 字

    阅读完需:约 4 分钟

51. N 皇后

51. N 皇后

难度困难 1243 收藏分享切换为英文接收动态反馈

n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。

每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。

 

示例 1:


输入:n = 4输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]解释:如上图所示,4 皇后问题存在两个不同的解法。
复制代码

示例 2:

输入:n = 1输出:[["Q"]]
复制代码

 

提示:

  • 1 <= n <= 9


题解:动态规划

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}
复制代码


发布于: 刚刚阅读数: 2
用户头像

Dead or Alive. 生存战斗是知识的源泉! 2018.11.08 加入

我是一名SRE哨兵,目前是好大夫基础架构部高级工程师。专注于 SRE,微服务、中间件的稳定性和可用性建设,整体负责好大夫服务治理云平台的设计和搭建!

评论

发布
暂无评论
51. N 皇后_LeetCode_方勇(gopher)_InfoQ写作平台