LeetCode | N-Queens II
来源:互联网 发布:一个算法应具备的特性 编辑:程序博客网 时间:2024/06/02 23:59
题目:
Follow up for N-Queens problem.Now, instead outputting board configurations, return the total number of distinct solutions.
思路:
与http://blog.csdn.net/lanxu_yy/article/details/17243057类似,由于时间复杂度要求更高,我做了一个小优化。即判断斜线上的Queen冲突不再由遍历完成,而是用两个数组保存左斜线和右斜线的结果。左斜线上满足i+j相等的单元格都在一条斜线上,右斜线上满足i-j+n相等的单元格也都在一条斜线上。
代码:
class Solution {public: vector<string> str; vector<bool> rowConflict; vector<bool> slashConflict; vector<bool> backSlashConflict; int count; int totalNQueens(int n) { for(int i=0;i<n;i++) { string tmp; for(int i=0;i<n;i++) { tmp.push_back('.'); } str.push_back(tmp); } for(int i=0;i<n;i++) { rowConflict.push_back(false); } for(int i=0;i<2*n;i++) { slashConflict.push_back(false); } for(int i=0;i<2*n;i++) { backSlashConflict.push_back(false); } count = 0; addAQueen(0,0,n); return count;}bool addAQueen(int i, int j, int n){ if(i == n) { count++; return true; } if(j==n) { return false; } if(!rowConflict[j]) {if(!slashConflict[i-j+n]){ if(!backSlashConflict[i+j]) { str[i][j] = 'Q'; rowConflict[j] = true; slashConflict[i-j+n] = true; backSlashConflict[i+j] = true; bool result = addAQueen(i+1,0,n); str[i][j] = '.'; rowConflict[j] = false; slashConflict[i-j+n] = false; backSlashConflict[i+j] = false; }}}return addAQueen(i,j+1,n);}};
0 0
- LeetCode: N-Queens II
- LeetCode : N-Queens II
- [Leetcode] N-Queens II
- 【leetcode】N-Queens II
- LeetCode: N Queens II
- [LeetCode]N-Queens II
- LeetCode - N-Queens II
- LeetCode:N-Queens II
- 【leetcode】N-Queens II
- LeetCode:N-Queens II
- Leetcode: N-Queens II
- leetcode N-Queens II
- LeetCode | N-Queens II
- Leetcode: N-Queens II
- LeetCode N-Queens II
- Leetcode N-Queens II
- N-Queens II -- LeetCode
- N-Queens II - LeetCode
- Study PyQt from beginning 之 2
- ArcGIS Engine 通过线构造面
- 在SQL Server中使用CLR调用.NET类库中的方法
- Simple Factory Pattern - 简单工厂模式
- 堆栈的数组实现
- LeetCode | N-Queens II
- Android 日志工具类
- ROC曲线,AUC,
- 串口与并口介绍
- C语言编写无类型的快速排序和归并排序
- 让C#自动缩进排列代码的快捷键
- 二级指针及链表操作中遇到的一点小问题
- Raw Socket和Socket编程
- Android TextView使用HTML处理字体样式、显示图片等