面试题 08.12. 八皇后
注意: 主/副对角线
var solveNQueens = function(n) {let res = [];let prev = [];dfs(n, 0, prev, res)// console.log(res)// return res;let queens = [];for (let i=0; i < res.length; i++) {let queen = generate(n, res[i])queens.push(queen)}return queens};function dfs(n, row, prev, res) {if (row == n) {res.push(prev.slice());return;}for (let col = 0; col < n; col++) {if (verified(n, prev, col)) {prev.push(col);dfs(n, row+1, prev, res);// 回溯prev.pop();}}}function verified(n, path, col) {// 行: 放置在prev.length// 列// 主对角线// 副对角线for (let row=0; row<path.length; row++) {let diff = Math.abs(path[row] - col); // 当前行所在列与目标列的距离if (diff == 0 || diff == path.length - row) return false;// 不在一列 不在主副线上: 与目标列的距离不等于到目标行的巨鳖}return true;}function generate(n, path) {let queen = Array.from({length: n}, (v, i) => {let col = new Array(n).fill('.')let index = path[i];col[index] = 'Q'return col.join('');})return queen}
面试题 08.13. 堆箱子
参考:
