Leetcode:N-Queens II
2014-11-17 12:59
246 查看
N-Queens II:Follow up for N-Queens problem.Now, instead outputting board configurations, return the total number of distinct solutions.跟上一题的方法一样,只是不用打印棋盘,只需要用一个变量记录可行解的个数即可。在网上看到一个代码,充分利用了指针,运行速度十分之快。看来要提高代码的运行效率,灵活运用指针是个好办法。
class Solution { private: bool *row, *column, *diagonal, *r_diagonal; int count; public: void init(int n) { row = new bool ; memset(row, true, sizeof(bool) * n); column = new bool ; memset(column, true, sizeof(bool) * n); diagonal = new bool[n * 2]; memset(diagonal, true, sizeof(bool) * n * 2); r_diagonal = new bool[n * 2]; memset(r_diagonal, true, sizeof(bool) * n * 2); count = 0; } void del() { delete [] row; delete [] column; delete [] diagonal; delete [] r_diagonal; } void search(int n, int num) { if (num == n) { count++; return; } for (int i = 0; i < n; i++) { if (row[i] && column[i] && diagonal[i + num] && r_diagonal[i - num + n]) { row[i] = false; column[i] = false; diagonal[i + num] = false; r_diagonal[i - num + n] = false; search(n, num + 1); row[i] = true; column[i] = true; diagonal[i + num] = true; r_diagonal[i - num + n] = true; } } } int totalNQueens(int n) { // Start typing your C/C++ solution below // DO NOT write int main() function init(n); search(n, 0); del(); return count; } };memset()函数:memset是计算机中C++语言函数。将s所指向的某一块内存中的前n个 字节的内容全部设置为ch指定的ASCII值,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作,其返回值为指向s的指针。void *memset(void *s, int ch, size_t n);函数解释:将s中前n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。
相关文章推荐
- LeetCode_N-Queens II
- leetcode-52. N-Queens II
- [leetcode]N-Queens II
- LeetCode: N-Queens II
- LeetCode || N-Queens II
- LeetCode 52. N-Queens II(N皇后问题Ⅱ)
- LeetCode:N-Queens II
- LeetCode: N-Queens II
- 【leetcode】N-Queens II
- LeetCode : N-Queens II
- leetcode-52. 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 And N-Queens II [LeetCode] + Generate Parentheses[LeetCode] + 回溯法
- Leetcode 51. N-Queens && 52. N-Queens II(Hard)
- [Leetcode] N-Queens II
- 【leetcode】N-queens II