日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【LeetCode笔记】51. N 皇后(DFS、经典题)

發布時間:2024/7/23 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【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) {// 1、地圖初始化graph = new char[n][n];for(int i = 0; i < n; i++) {for(int j = 0; j < n; j++) {graph[i][j] = '.';}}// 2、DFS 獲取答案dfs(0);return ans;}void dfs(int row) {// 1、遞歸結束,加入答案if(row == graph.length) {ans.add(array2List());}// 2、對當前行,逐列進行判斷、DFSfor(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) {// 1、列for(int i = row - 1; i >= 0; i--) {if(graph[i][col] == 'Q') {return false;}}// 2、45度for(int i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--) {if(graph[i][j] == 'Q') {return false;}}// 3、135度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、经典题)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。