1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| class Solution { boolean[][] visited; private List<List<String>> res = new ArrayList<List<String>>(); public List<List<String>> solveNQueens(int n) {
List<StringBuffer> list = new ArrayList<StringBuffer>(); visited = new boolean[3][n*2]; for(int i=0; i<n;i++) { StringBuffer sbuf = new StringBuffer(); for(int j=0;j<n;j++){ sbuf.append('.'); } list.add(sbuf); } search(list, 0, n); return res; } public void search(List<StringBuffer> list, int cur, int n) { if(cur==n) { ArrayList<String> list2 = new ArrayList<>(); for(StringBuffer sb: list) { list2.add(sb.toString()); } res.add(list2); return ; }else { for(int i=0;i<n;i++) { if(!visited[0][i]&&!visited[1][cur+i] &&!visited[2][cur-i+n]) { list.get(cur).setCharAt(i, 'Q'); visited[0][i] = visited[1][cur+i] = visited[2][cur-i+n]=true; search(list, cur+1, n); list.get(cur).setCharAt(i, '.'); visited[0][i] = visited[1][cur+i] = visited[2][cur-i+n] = false; } } } }
}
|