本文共 1202 字,大约阅读时间需要 4 分钟。
只是为了记录一下,不求多快,也不深究。
会简要描述思路,代码中不写注释。
如碰到不会做的用了别人代码会在博客中标出。
就跟上一题一样啊,上一题是把所有解都找出来,这题是求出解的个数,比上一题还简单一点。
class Solution { private int count; private int[] cols; private int[] mains; private int[] secondary; private int[] queens; private int n; public int totalNQueens(int n) { cols = new int[n]; mains = new int[2 * n - 1]; secondary = new int[2 * n - 1]; queens = new int[n]; this.n = n; this.count = 0; backTrack(0); return count; } private void backTrack(int row) { if (row == n) { count++; return; } for (int col = 0; col < n; col++) { if (isOkToPut(row, col)) { putQueen(row, col); } else { continue; } backTrack(row + 1); removeQueen(row, col); } } private boolean isOkToPut(int row, int col) { if (cols[col] == 0 && mains[row - col + n - 1] == 0 && secondary[row + col] == 0) { return true; } else { return false; } } private void putQueen(int row, int col) { queens[row] = col; cols[col] = 1; mains[row - col + n - 1] = 1; secondary[row + col] = 1; } private void removeQueen(int row, int col) { queens[row] = 0; cols[col] = 0; mains[row - col + n - 1] = 0; secondary[row + col] = 0; }}
转载地址:http://cwee.baihongyu.com/