LeetCode | N-Queens II
2013-12-11 09:35
295 查看
题目:
Follow up for N-Queens problem.Now, instead outputting board configurations, return the total number of distinct solutions.
思路:
与/article/1382581.html类似,由于时间复杂度要求更高,我做了一个小优化。即判断斜线上的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); } };
相关文章推荐
- LeetCode N-Queens II
- leetcode hard模式专杀之52 N-Queens II
- [Leetcode] N-Queens II (Java)
- ***(leetcode) N-Queens II
- [leetcode]N-Queens II
- Leetcode 51. N-Queens && 52. N-Queens II(Hard)
- N-Queens II——Leetcode
- leetcode:N-Queens II (n皇后问题2)【面试算法题】
- LeetCode | N-Queens II
- Leetcode:N-Queens II
- LeetCode: N-Queens II
- LeetCode 52. N-Queens II
- leetcode N-Queens II
- [LeetCode][Java] N-Queens II
- [LeetCode]N-Queens II
- LeetCode-51. N-Queens和LeetCode-52. N-Queens II
- N-Queens And N-Queens II [LeetCode] + Generate Parentheses[LeetCode] + 回溯法
- 【LeetCode】52.N-Queens II(hard)解题报告
- Leetcode: N-Queens && N-Queens II
- LeetCode - N-Queens II