N-Queens
题目大意
经典的八皇后问题的一般情况
注意点:
皇后用”Q”表示,空白用”.”表示
解题思路
回溯法,位运算等,见总结
代码
回溯法
使用一位数组存储可能的解法例如[1,3,0,2],最后再生成二位字符串图形
如图理解:
1 | class Solution(object): |
位计算
解决思路还是一行一行地查找。但是使用3个2进制数来存储列、左对角线、右对角线上不能下棋的位置。
如下图所示(1表示位置不合法):
于是当前行所有不合法位置即为 row | ld | rd ,整体上加快了寻找合法位置的速度。
考虑问题的对称性
将8皇后其中一个解垂直翻转后,可以得到一个新的解,故,可以只计算一半,从而加快时间。
N-Queens II
题目大意
计算解的个数
解题思路
不需要画图,有一个解就自增1
代码
1 | class Solution(object): |
总结
代码我都尽量详细注释,并且把重要变量print出来便于理解
经典回溯法问题,解法很多,不过无外乎递归非递归等。
看到用位计算的,以后学习参考,效率两道题目都是最高的。
https://github.com/zhsj/nqueen/blob/master/N%E7%9A%87%E5%90%8E%E9%97%AE%E9%A2%98.md