LeetCode—51.N-Queens
来源:互联网 发布:java读懂项目代码 编辑:程序博客网 时间:2024/06/05 16:53
思路:用一个数组装纵坐标,节省一次判断,然后使用回溯算法。
public class Solution { public List<List<String>> solveNQueens(int n) { //装n皇后的数组 int[] nums=new int[n]; //答案 List<List<String>> ans=new ArrayList<List<String>>(); int i=0; while (true) { //所有可能已经尝试完毕,退出游戏if (i<0) {return ans;}//成功尝试出一种答案, 装载答案if (i==n) {List<String> list=new ArrayList<String>();for (int j = 0; j < nums.length; j++) {StringBuffer sb=new StringBuffer();for (int k = 0; k < n; k++) {if (k!=nums[j]) {sb.append(".");}else {sb.append("Q");}}list.add(sb.toString());}ans.add(list);//回退i--;while (nums[i]==n) {nums[i]=0;i--;}nums[i]++;}else {if (nums[i]==n) {//回退while (i>=0&&nums[i]==n) {nums[i]=0;i--;}if (i>=0) {nums[i]++;}}else {if (f(nums,i,nums[i])) {i++;}else {nums[i]++;}}}}// return ans; } public boolean f(int[] nums,int x,int val){ for (int i = 0; i < x; i++) { int t=x-i;if (val==nums[i]||val==nums[i]+t||val==nums[i]-t) {return false;}} return true; }}
0 0
- LeetCode—51.N-Queens
- LeetCode 51. N-Queens
- LeetCode --- 51. N-Queens
- LeetCode 51.N-Queens
- [Leetcode] 51. N-Queens
- [leetcode] 51.N-Queens
- [leetcode] 51. N-Queens
- LeetCode 51. N-Queens
- leetcode 51. N-Queens
- 【LeetCode】51. N-Queens
- leetcode 51. N-Queens
- LeetCode 51. N-Queens
- LeetCode 51. N-Queens
- leetcode.51. N-Queens
- Leetcode 51. N-Queens
- LeetCode 51. N-Queens
- [LeetCode] 51. N-Queens
- leetcode 51. N-Queens
- Http 请求头 和 相应头
- JQ检测(判断)一个链接(URL)是否有效(服务可用)
- HDU3001 Travelling
- 获取当前显示屏幕某一点的颜色
- typecho管理员帐号密码忘记的修改方法
- LeetCode—51.N-Queens
- USB转串口CH340接线方法
- LoadRunner如何监控Tomcat性能
- javascript中concat()、slice()、substr()和substring()字符串方法
- LayoutInflater的inflate方法详解
- Python/scikit-learn机器学习库(SVM支持向量机)
- 通过gitcheckout到本地然后通过pod添加框架后出现.h文件找不到问题的解决办法
- Ubuntu 常用命令记载
- 值得推荐的C/C++框架和库