生活随笔
收集整理的這篇文章主要介紹了
【LeetCode笔记】51. N 皇后(DFS、经典题)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
題目描述
- 經典題了…但是大一敲過后就再沒碰過了。結果面試還是會問= =,今天補一下~
思路 && 代碼
- 還是挺清晰的,要點如下:
- 使用 DFS,找到一個了再繼續找
- 對每一行,逐列進行可行點選擇
- 放置點可行判斷:【對低行進行】列、45度、135度判斷
- 答案格式轉換,char[][] 變成 List
class Solution {List<List<String>> ans
= new ArrayList<>(); char[][] graph
;public List<List<String>> solveNQueens(int n
) {graph
= new char[n
][n
];for(int i
= 0; i
< n
; i
++) {for(int j
= 0; j
< n
; j
++) {graph
[i
][j
] = '.';}}dfs(0);return ans
;}void dfs(int row
) {if(row
== graph
.length
) {ans
.add(array2List());}for(int col
= 0; col
< graph
[0].length
; col
++) {if(judge(row
, col
)) {graph
[row
][col
] = 'Q';dfs(row
+ 1);graph
[row
][col
] = '.';}}}boolean judge(int row
, int col
) {for(int i
= row
- 1; i
>= 0; i
--) {if(graph
[i
][col
] == 'Q') {return false;}}for(int i
= row
- 1, j
= col
- 1; i
>= 0 && j
>= 0; i
--, j
--) {if(graph
[i
][j
] == 'Q') {return false;}}for(int i
= row
- 1, j
= col
+ 1; i
>= 0 && j
< graph
[0].length
; i
--, j
++) {if(graph
[i
][j
] == 'Q') {return false;}}return true;}List<String> array2List() {List<String> list
= new ArrayList<>();for(int i
= 0; i
< graph
.length
; i
++) {list
.add(String.valueOf(graph
[i
]));}return list
;}
}
總結
以上是生活随笔為你收集整理的【LeetCode笔记】51. N 皇后(DFS、经典题)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。