• leetcode 52. N皇后 II


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

     

    上图为 8 皇后问题的一种解法。

    给定一个整数 n,返回 n 皇后不同的解决方案的数量。

    示例:

    输入: 4
    输出: 2
    解释: 4 皇后问题存在如下两个不同的解法。
    [
     [".Q..",  // 解法 1
      "...Q",
      "Q...",
      "..Q."],

     ["..Q.",  // 解法 2
      "Q...",
      "...Q",
      ".Q.."]
    ]

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/n-queens-ii
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    解法同leetcode 51,只是统计个个数而已。

     1 class Solution {
     2     // 按行的方式
     3     private boolean isOk(char[][] res, int i, int j, int n){ // 检测位置(i,j)可不可以放置
     4         if (res[i][j] == 'Q') return false;
     5         // 列 与 行
     6         for (int k = 0; k < n; ++k){
     7             if (k != i && res[k][j] == 'Q')
     8                 return false;
     9             if (k != j && res[i][k] == 'Q')
    10                 return false;
    11         }
    12         // 皇后左上
    13         for (int k = 1; i-k >= 0 && j-k >= 0; ++k)
    14             if (res[i-k][j-k] == 'Q')
    15                 return false;
    16         // 皇后右下
    17         for (int k = 1; i+k < n && j+k < n; ++k)
    18             if (res[i+k][j+k] == 'Q')
    19                 return false;
    20         // 皇后右上
    21         for (int k = 1; i-k >=0 && j+k < n; ++k)
    22             if (res[i-k][j+k] == 'Q')
    23                 return false;
    24         // 皇后左下
    25         for (int k = 1; i+k < n && j-k >= 0; ++k)
    26             if (res[i+k][j-k] == 'Q')
    27                 return false;
    28         return true;
    29     }
    30     // cur:在第cur行放置皇后
    31     // lists:存放不同的放置方案
    32     private int result(int n, char[][] res, int cur){
    33         if (cur == n){
    34             return 1;
    35         }
    36         int cnt = 0;
    37         for (int i = 0; i < n; ++i){
    38             if (isOk(res, cur, i, n)){
    39                 res[cur][i] = 'Q';
    40                 cnt += result(n, res, cur+1);
    41                 res[cur][i] = '.';
    42             }
    43         }
    44         return cnt;
    45     }
    46 
    47 
    48 
    49     private Integer solveNQueens(int n) {
    50         char[][] res = new char[n][n];
    51         /*
    52         .:可以放置皇后
    53         Q:已经放置皇后
    54         -:和已有皇后冲突
    55          */
    56         for (int i = 0; i < n; i++)
    57             for (int j = 0; j < n; j++)
    58                 res[i][j] = '.';
    59         return result(n, res, 0);
    60     }
    61     public int totalNQueens(int n) {
    62         return solveNQueens(n);
    63     }
    64 }
  • 相关阅读:
    containerd 与安全沙箱的 Kubernetes 初体验
    dubbo-go 中的 TPS Limit 设计与实现
    MVC
    DataGridView移动上下行
    Jquery hover 事件
    MVC
    MVC 基本概念
    AJAX简单封装
    ViewState
    PostBack
  • 原文地址:https://www.cnblogs.com/yfs123456/p/11564315.html
Copyright © 2020-2023  润新知