ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

面试题 08.12. 八皇后

2022-01-18 23:33:59  阅读:150  来源: 互联网

标签:面试题 sb int lowbit private 08.12 allow path 皇后


设计一种算法,打印 N 皇后在 N × N 棋盘上的各种摆法,其中每个皇后都不同行、不同列,也不在对角线上。这里的“对角线”指的是所有的对角线,不只是平分整个棋盘的那两条对角线。

注意:本题相对原题做了扩展

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/eight-queens-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

class Solution {

    private List<List<String>> ans = new ArrayList<>();

    private LinkedList<Integer> path = new LinkedList<>();

    private void add() {
        List<String> item = new ArrayList<>();
        for (int x : path) {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < x; ++i) {
                sb.append(".");
            }
            sb.append("Q");
            for (int i = x + 1; i < path.size(); ++i) {
                sb.append(".");
            }
            item.add(sb.toString());
        }
        ans.add(item);
    }

    private int log2(int x) {
        return (int) (Math.log(x) / Math.log(2) + 0.5);
    }

    private void solve(int LIMIT, int rowLimit, int leftLimit, int rightLimit) {
        if (rowLimit == LIMIT) {
            add();
            return;
        }
        int allow = LIMIT & (~(rowLimit | leftLimit | rightLimit));
        while (allow > 0) {
            int lowbit = allow & (-allow);
            path.offerLast(log2(lowbit));
            solve(LIMIT, rowLimit | lowbit, (leftLimit | lowbit) << 1, (rightLimit | lowbit) >> 1);
            allow -= lowbit;
            path.pollLast();
        }
    }

    public List<List<String>> solveNQueens(int n) {
        solve((1 << n) - 1, 0, 0, 0);
        return ans;
    }
}

标签:面试题,sb,int,lowbit,private,08.12,allow,path,皇后
来源: https://www.cnblogs.com/tianyiya/p/15820424.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有