n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。
上图为 8 皇后问题的一种解法。
给定一个整数 n,返回 n 皇后不同的解决方案的数量。
示例:
输入: 4 输出: 2 解释: 4 皇后问题存在如下两个不同的解法。 [ [".Q..", // 解法 1 "...Q", "Q...", "..Q."], ["..Q.", // 解法 2 "Q...", "...Q", ".Q.."] ]
只需要把51题的return条件换掉就行,注意用static时,服务器进行测试1的时候很容易出错。故变为数组进行存储结果。。。不求上进
1 class Solution { 2 public static int totalNQueens(int n) { 3 if(n <=0)return 0; 4 int[] res={0}; 5 helper(new int[n],0,res); 6 return res[0]; 7 } 8 public static void helper(int[] queens,int pos,int[] res){ 9 if(pos == queens.length){ 10 res[0] += 1; 11 return; 12 } 13 for(int i = 0 ;i < queens.length;i++){ 14 queens[pos] = i; 15 if(isValid(queens,pos)){ 16 helper(queens,pos+1,res); 17 } 18 } 19 } 20 public static boolean isValid(int[] queens,int pos){ 21 for(int i = 0;i < pos;i++){ 22 if(queens[i] == queens[pos])return false; 23 else if(Math.abs(queens[i] - queens[pos]) == Math.abs(i - pos)){ 24 return false; 25 } 26 } 27 return true; 28 } 29 30 }
2019-05-10 16:19:39