LeetCode 笔记系列 14 N-Queen II [思考的深度问题]
2013-07-12 20:22
579 查看
题目: Follow up for N-Queens problem.
Now, instead outputting board configurations, return the total number of distinct solutions.
Niubility N Queen
好一个不明觉厉,男默女泪的算法!
。。。。。
首先,再次承认和牛人的差距。
其次,反思,反思,深刻地反思。为毛牛人就知道这一点呢?其实所有中间信息都可以用一个整数来表示啊。
特别是那个左右对角线的事情,弄的本娃很郁闷。仔细想想,可不是嘛,当设置了一个Q以后,就是设置其左下方和右下方不能访问嘛。随着层次的深入(向最后一行靠近),对角线的状态可不就是左对角线左移,右对角线右移嘛。天,好有画面感的事情。
这里还有个小技巧。11100这个二进制数,怎么知道从右向左边第一个1的位置啊?
p = (pos) & (-pos)
我真是不知道这个,如果你也不知道负数在计算机中的表示方法的话,建议google之。
哦,这里有个关于这个算法的图图,看看有帮助。http://www.matrix67.com/blog/archives/266
我想去买这位blogger的书了。
总结:
1. 思考要有[b]深度[/b]。就是说,理解一下,当前的信息到底是怎么样得出来的,而不是看表象。
2. 要有[b]画面感[/b]。
Now, instead outputting board configurations, return the total number of distinct solutions.
public int totalNQueens(int n){ cnt = 0; upper = (1<<n)-1 ; Queen(0,0,0); return cnt; } //为啥说大牛niub呢,看看我下面那个,再对比ld和rd,人大牛一眼就看出来了,没必要保存 //所有对角线信息啊。下一个状态,完全由当前状态决定!! private void Queen(int row, int ld, int rd){//ld, left 对角线; rd, right 对角线 int pos, p; if(row!=upper) { //so pos in binary is like, under current row/ld/rd restriction, what is available slot to put Q pos = upper & (~(row | ld |rd)); while(pos!=0)//available is 1 { p = pos & (-pos);//from right to left, the first "1" in pos //now, we occupy the most right available position pos = pos - p;//now take this available as ”Q“,pos kind of like a available slot marker Queen(row+p,(ld+p)<<1,(rd+p)>>1); } } else ++cnt; }
Niubility N Queen
好一个不明觉厉,男默女泪的算法!
。。。。。
首先,再次承认和牛人的差距。
其次,反思,反思,深刻地反思。为毛牛人就知道这一点呢?其实所有中间信息都可以用一个整数来表示啊。
特别是那个左右对角线的事情,弄的本娃很郁闷。仔细想想,可不是嘛,当设置了一个Q以后,就是设置其左下方和右下方不能访问嘛。随着层次的深入(向最后一行靠近),对角线的状态可不就是左对角线左移,右对角线右移嘛。天,好有画面感的事情。
这里还有个小技巧。11100这个二进制数,怎么知道从右向左边第一个1的位置啊?
p = (pos) & (-pos)
我真是不知道这个,如果你也不知道负数在计算机中的表示方法的话,建议google之。
哦,这里有个关于这个算法的图图,看看有帮助。http://www.matrix67.com/blog/archives/266
我想去买这位blogger的书了。
总结:
1. 思考要有[b]深度[/b]。就是说,理解一下,当前的信息到底是怎么样得出来的,而不是看表象。
2. 要有[b]画面感[/b]。
相关文章推荐
- Keras深度学习框架学习笔记系列(1)- IndentationError错误问题
- [LeetCode系列] 二叉树最大深度求解问题(C++递归解法)
- Deep Learning(深度学习)学习笔记整理系列之(二)
- Deep Learning(深度学习)学习笔记整理系列之(一)(转)
- Deep Learning(深度学习)学习笔记整理系列之(八)
- Deep Learning(深度学习)学习笔记整理系列之(三)
- Deep Learning(深度学习)学习笔记整理系列之(一)
- Deep Learning(深度学习)学习笔记整理系列之(六)
- (转载)Deep Learning(深度学习)学习笔记整理系列之(二)
- Deep Learning(深度学习)学习笔记整理系列之(八)
- Deep Learning(深度学习)学习笔记整理系列之(七)
- cocos2d-x学习笔记(14)笨木头游戏系列LittleRunner
- 干货 | 深度学习应用中需要思考的问题
- [LeetCode] Count Primes - 素数系列问题
- Deep Learning(深度学习)学习笔记整理系列之(八)
- Deep Learning(深度学习)学习笔记整理系列之(六)
- Deep Learning(深度学习)学习笔记整理系列之(三)
- 算法系列笔记8(有关图的算法二—最短路径问题)
- ElasticStack系列之十五 & query cache 引起性能问题思考
- Deep Learning(深度学习)学习笔记整理系列之(一)