这道题跟N-Queens算法是完全一样的,只是把输出从原来的结果集变为返回结果数量而已。思路我们就不在赘述了,大家可以参见N-Queens,算法的时间复杂度仍然是指数量级的,空间复杂度是O(n)。代码如下:
public int totalNQueens(int n) { ArrayList<Integer> res = new ArrayList<Integer>(); res.add(0); helper(n,0,new int[n],res); return res.get(0); } private void helper(int n, int row, int[] columnForRow, ArrayList<Integer> res) { if(row==n) { res.set(0,res.get(0)+1); return; } for(int i=0;i<n;i++) { columnForRow[row]=i; if(check(row,columnForRow)) { helper(n,row+1,columnForRow,res); } } } private boolean check(int row, int[] columnForRow) { for(int i=0;i<row;i++) { if(columnForRow[i]==columnForRow[row] || Math.abs(columnForRow[row]-columnForRow[i])==row-i) return false; } return true; }这道题目我个人没有看到从输出结果集变为输出结果数量有什么可提升的空间,不像Unique Paths,输出结果集还是数量是有不同复杂度的解法的。如果这个题大家有什么更优的解法,可以留言或者发邮件到linhuanmars@gmail.com给我交流一下哈。
问一下时间复杂度? 谢谢
回复删除这是一个NP问题,也就是复杂度是指数量级的,具体复杂度就是结果的数量~
删除