LeetCode | 52.N-Queens II
2017-04-03 15:48
507 查看
类似上一篇博客N皇后,但是由于这里的N会特别大(10^9),所以不能直接用数组,内存会爆掉.可以用动态数组vector每次push_back. 3ms AC.
class Solution { public: int sum = 0; vector<int> pos;//记录第 i 个皇后的位置 vector<int> can;//can[i] = 0表示可以放置 void f(int i,int n)//放置第 i 行 { int flag = 0; if(i == n) { sum++; return; } can.clear(); for(int j=0;j<n;j++) can.push_back(0); for(int j=0;j<i;j++) { can[pos[j]] = 1; if(i+pos[j]-j < n) can[i+pos[j]-j] = 1; if(i <= pos[j]+j) can[pos[j]+j-i] = 1; } for(int j=0;j<n;j++) { if(can[j] == 0) { flag = 1; if(pos.size() < i+1) pos.push_back(j); else pos[i] = j; f(i+1,n); //还原 can 数组 can.clear(); for(int k=0;k<n;k++) can.push_back(0); for(int k=0;k<i;k++) { can[pos[k]] = 1; if(i+pos[k]-k < n) can[i+pos[k]-k] = 1; if(i <= pos[k]+k) can[pos[k]+k-i] = 1; } } } if(flag == 0) return; } int totalNQueens(int n) { sum = 0; f(0,n); return sum; } };
相关文章推荐
- LeetCode - 52. N-Queens II
- [leetcode] 52.N-Queens II
- [Leetcode] 52. N-Queens II
- 【LeetCode】52. N-Queens II
- 【LeetCode】52. N-Queens II
- leetCode 52.N-Queens II (n皇后问题II) 解题思路和方法
- [leetcode] 52. N-Queens II 解题报告
- leetcode: 52. N-Queens II
- LeetCode--52. N-Queens II
- 【一天一道LeetCode】#52. N-Queens II
- LeetCode-52. N-Queens II (JAVA)(N皇后解集个数)
- Leetcode 52. N-Queens II
- 【一天一道LeetCode】#52. N-Queens II
- leetcode-52. N-Queens II
- LeetCode 52. N-Queens II
- LeetCode 52. N-Queens II(N皇后问题Ⅱ)
- LeetCode 52.N-Queens II
- <LeetCode OJ> 52. N-Queens II
- leetcode52. N-Queens II
- [LeetCode] 52. N-Queens II