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
原创粉丝点击