Leetcode_51_N皇后_搜索

该博客介绍了如何使用Java实现N皇后问题的解决方案。通过全排列策略,找到所有可能的皇后放置方式,同时检查每一对皇后是否在同一斜线上,确保没有冲突。最终输出所有合法的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import java.util.*;

// 冲刺058
class Solution {
    public List<List<String>> solveNQueens(int n) {
        List<List<String>> ans = new ArrayList<>();
        List<List<Integer>> all = new ArrayList<>();
        getAll(n, new boolean[n], new LinkedList<>(), all);

        char[] temp = new char[n];
        Arrays.fill(temp, '.');

        for (List<Integer> integers : all) {
            // n个点的坐标为(i, integers.get(i))
            boolean flag = true;
            // 所有点两两校验
            for (int i = 0; i < n && flag; i++) {
                int y1 = integers.get(i);
                for (int j = i + 1; j < n; j++) {
                    int x = j - i;
                    int y = integers.get(j) - y1;
                    if (Math.abs(x) == Math.abs(y)) {
                        flag = false;
                        break;
                    }
                }
            }
            if (flag) {
                List<String> now = new ArrayList<>();
                for (int i = 0; i < n; i++) {
                    temp[integers.get(i)] = 'Q';
                    now.add(new String(temp));
                    temp[integers.get(i)] = '.';
                }
                ans.add(now);
            }
        }
        return ans;
    }

    // 获取全排列
    void getAll(int n, boolean[] use, Deque<Integer> now, List<List<Integer>> ans) {
        if (now.size() == n) {
            ans.add(new ArrayList<>(now));
            return;
        }
        for (int i = 0; i < n; i++) {
            if (!use[i]) {
                use[i] = true;
                now.add(i);
                getAll(n, use, now, ans);
                now.removeLast();
                use[i] = false;
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值