博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
52. N-Queens II
阅读量:6873 次
发布时间:2019-06-26

本文共 2331 字,大约阅读时间需要 7 分钟。

题目:

Follow up for N-Queens problem.

Now, instead outputting board configurations, return the total number of distinct solutions.

 

Show Tags
Show Similar Problems
 

链接: 

题解:

刚昨晚NQueens I, 这换个问题又算一题...不过省了我们很多事。只需要设一个global的count来记录找到解的数目。

Time Complexity - O(nn), Space Complexity - O(n)

public class Solution {    private int count = 0;        public int totalNQueens(int n) {        if(n <= 0)            return count;        int[] queens = new int[n];      // queens must be a permutation of n        trySolveNQueens(queens, 0);        return count;    }    private void trySolveNQueens(int[] queens, int pos) {        int len = queens.length;        if(pos == len)            count++;        else {            for(int i = 0; i < len; i++) {                queens[pos] = i;                if(isBoardValid(queens, pos))                    trySolveNQueens(queens, pos + 1);            }        }    }        private boolean isBoardValid(int[] queens, int pos) {        for(int i = 0; i < pos; i++) {            if(queens[i] == queens[pos])        // column conflicts                return false;            else if(Math.abs(queens[pos] - queens[i]) == Math.abs(i - pos))  // diagonal conflicts                return false;        }                return true;    }}

 

二刷:

Java:

上一题的简化版本,只需要求有多少种solution就可以了。以后再了解一下NQueens的fancy做法

Time Complexity - O(nn), Space Complexity - O(n)

public class Solution {    private int totalQueens = 0;    public int totalNQueens(int n) {        if (n <= 0) {            return 0;        }        int[] queens = new int[n];        trySolveNQueens(queens, 0);        return totalQueens;    }        private void trySolveNQueens(int[] queens, int pos) {        if (pos == queens.length) {            totalQueens++;        } else {            for (int i = 0; i < queens.length; i++) {                queens[pos] = i;                if (isBoardValid(queens, pos)) {                    trySolveNQueens(queens, pos + 1);                }            }        }    }        private boolean isBoardValid(int[] queens, int pos) {        for (int i = 0; i < pos; i++) {            if (queens[i] == queens[pos]) {                return false;            }            if (Math.abs(queens[i] - queens[pos]) == Math.abs(i - pos)) {                return false;            }        }        return true;    }}

 

Reference:

 

转载地址:http://wclfl.baihongyu.com/

你可能感兴趣的文章
HTML5 History对象,Javascript修改地址栏而不刷新页面(二)
查看>>
js获取url信息
查看>>
python 图
查看>>
angular 2 - 005 路由实现机制
查看>>
SQL LIKE语句多条件贪婪加权匹配算法(改进版)
查看>>
【足迹C++primer】表达式求值
查看>>
javascript小白学习指南0---1
查看>>
8小时与8节课
查看>>
harbor1.4.0高可用部署
查看>>
转: 深入理解 AngularJS 的 Scope
查看>>
js传入和传出参数乱码
查看>>
C#实现接口xml序列化与反序列化
查看>>
[译]Godot系列教程一 - 场景与节点
查看>>
BUG级别定义标准
查看>>
Java常考面试题(经典)
查看>>
可能是迄今为止最好的GitHub代码浏览插件--赞
查看>>
ASP.NET Core 微服务初探[1]:服务发现之Consul
查看>>
HDU-1072 Nightmare BFS
查看>>
认清世界,认清自我,超凡脱俗
查看>>
在VC中向数据库提交SLQ语句
查看>>