52. N皇后 II

Leetcode

  • 歸類: dfs+回溯

52. N皇后 II

  1. 一次枚舉每一行皇后的位置
  2. 判斷每一列和正斜線(d)、反斜線(ud)的位置
/** * @param {number} n * @return {number} */
var totalNQueens = function(n) {
    let ans = 0;
    let col = new Array(n);
    let d = new Array(2 * n - 1).fill(false); // 每一列只能有一個皇后
    let ud = new Array(2 * n - 1).fill(false);
    dfs(0);
    return ans;
    
    function dfs(u) {
        if(u === n) {
            ans++;
            return;
        }
        for(let i = 0; i < n; i++){
            if(!col[i] && !d[i + u] && !ud[i - u + n]) {
                col[i] = d[i + u] = ud[i - u + n] = true;
                dfs(u + 1);
                // 重置狀態
                col[i] = d[i + u] = ud[i - u + n] = false;
            }
        }
    }
};
複製代碼
相關文章
相關標籤/搜索