`
king_tt
  • 浏览: 2095592 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

【leetcode】N-Queens II

 
阅读更多

Question:

Follow up for N-Queens problem.

Now, instead outputting board configurations, return the total number of distinct solutions.


Anwser 1: O(n^3) based-on Row

class Solution {
public:
    bool check(int row, int* colArray) {
        for (int i = 0; i < row; ++i) 
        {
            int diff = abs(colArray[i] - colArray[row]);      // in a col
            if (diff == 0 || diff == row - i) {         // int a row or line
                return false;
            }
        }
        return true;
    }

    void placeQueens(int row, int n, int &count, int* colArray) {
        if (row == n) {
            ++count;
            return;
        }
        
        for (int col = 0; col < n; ++col) {     // in 0 row, test n col
            colArray[row] = col;
            if (check(row, colArray)){
                placeQueens(row+1, n, count, colArray);    // test other rows
            }
        }
    }
    
    int totalNQueens(int n) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        int *colArray = new int[n];
        int count = 0;
        
        placeQueens(0, n, count, colArray);
        
        return count;
    }
};


Anwser 2:O(n^3) based-on Col

class Solution {
public:
    bool check(int col, int *rowArray){
        for(int i = 0; i < col; i++){
            if(rowArray[i] == rowArray[col] || abs(rowArray[i] - rowArray[col]) == col - i)
                return false;
        }
        return true;
    }
    
    void placeQueens(int col, int n, int &count, int *rowArray){
        if(col == n){
            count++;
            return;
        }
        
        for(int row = 0; row < n; row++){
            rowArray[col] = row;
            if(check(col, rowArray)){
                placeQueens(col+1, n, count, rowArray);
            }
        }
    }

    int totalNQueens(int n) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        int *rowArray = new int[n];
        int count = 0;
        
        placeQueens(0, n, count, rowArray);
        
        return count;
    }
};


Anwser 3:O(n^3) while

    bool check(int row, int* colArray) {
        for (int i = 0; i < row; ++i) 
        {
            int diff = abs(colArray[i] - colArray[row]);        // in a col
            if (diff == 0 || diff == row - i) {                 // int a row or line
                return false;
            }
        }
        return true;
    }
    
    int totalNQueens(int n) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        
        if(n == 1) return 1;
        
        int *colArray = new int[n+1];
        int count = 0;
        
        colArray[1] = 0;
        int k = 1;
        while(k > 0){
            
            colArray[k] += 1;
            while( (colArray[k] <= n) && !check(k, colArray) ){
                colArray[k]++;
            }
            
            if(colArray[k] <= n){
                if(k == n){
                    count++;
                } else {
                    colArray[++k] = 0;
                } 
            } else {
                k--;
            }
        }
        
        return count;
    }


More Code: g++

n-queue.c

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <math.h>

bool check(int row, int* colArray) {
    for (int i = 0; i < row; ++i) 
    {
        int diff = abs(colArray[i] - colArray[row]);        
        if (diff == 0 || diff == row - i) {                 
            return false;
        }
    }
    return true;
}

int totalNQueens(int n) {


    if(n == 1) return 1;

    int *colArray = new int[n+1];
    int count = 0;

    colArray[1] = 0;
    int k = 1;
    while(k > 0){

        colArray[k] += 1;
        while( (colArray[k] <= n) && !check(k, colArray) ){
            colArray[k]++;
        }

        if(colArray[k] <= n){
            if(k == n){
                count++;
            } else {
                colArray[++k] = 0;
            } 
        } else {
            k--;
        }
    }


    printf("%d\t%d\n", n, count);
    return count;
}

int main(){
    int num = 16;
    for(int i = 0; i < num; i++){
        totalNQueens(i);
    }

    return 0;
}
cmd:g++ -g n-queue.c -o n-queue && ./n-queue

Result:

0 1
1 1
2 0
3 0
4 2
5 10
6 4
7 40
8 92
9 352
10 724
11 2680
12 14200
13 73712
14 365596
15 2279184




参考推荐:

N皇后问题

LeetCode题目:N-Queens


分享到:
评论

相关推荐

    leetcode71python-leetcode:leetcode

    leetcode 71 Python用 Python 编写 Leetcode (数据科学家的解决方案) - 易于理解的最佳解决方案,可以通过所有 Leetcode 测试用例,对于非 ...leetcode ...leetcode ...N-Queens (HARD) Leetcode 52. N-

    leetcode分类-LeetCode:力码

    leetcode 分类 LeetCode Progress 128/154 Other Solutions C++,有详细思路解释 python,部分有解释 Java,部分有解释 ...norvig神牛Python代码写的很飘逸,果然是有LISP...N-Queens N-Queens II Balanced Binary Tree Binar

    leetcode530-leetcode-practice:练习力码

    leetcode 530 力码练习 前 250 个问题 1 二和 :check_mark: 3 无重复字符的最长子串 :check_mark: 4 两个有序数组的中位数 5 最长回文子串 7 反转整数 8 字符串到整数 (atoi) 10 正则表达式匹配 11 盛水的容器 12 ...

    leetcode怎么计算空间复杂度是指-LeetCode-Solution:我的第一个LeetCode解决方案

    051:N-Queens 052:N-Queens II 071: Letter Combinations of a Phone Number 093:Restore IP Addresses 树的遍历问题也可以用这种思想来解释。只不过是特殊的递归而已。(只有两路,不用循环) 题型二:动态规划...

    leetcode530-LeetCode:力码

    leetcode ...N-Queens II 最大子阵列 螺旋矩阵 跳跃游戏 合并间隔 插入间隔 螺旋矩阵 II 排列顺序(无法访问文章) 61-70 轮换名单 独特的路径 独特的路径 II 最小路径和(无法访问文章) 有效号码 加一

    leetcode推箱子放进进仓库-Leetcode-May-Challenge-2021:它包含LeetcodeMayChallenge202

    leetcode 推开箱子进深 Leetcode-May-Challenge-2021 它包含 Leetcode May Challenge 2021 的解决方案 比赛链接: 问题 问题名称 点击打开问题 无向图中的连通分量数 ...N-皇后 ...N-Queens II 最大差距 搜索建议系统

    leetcode怎么销号-LeetCode-Solutions:我自己的LeetCode解决方案

    leetcode怎么销号 LeetCode-Solutions :green_heart:My ...N-Queens Hard 回溯 0053 Maximum Subarray Easy 动态规划 0069 Sqrt(x) Easy 二分、牛顿迭代 0070 Climbing Stairs Easy 动态规划 0075 Sort Colors M

    leetcode答案-LeetCode-and-At-Offer:LeetCode即买即卖

    leetcode ...NQueens * 回溯法- 网易2017算法工程师笔试题3 * 贪心法- Dijkstra算法 ShortestDistanceAlgorithm * 动态规划- Floyd最短路径算法 ShortestDistanceAlgorithm * 动态规划- 最长公共子序列 ...

    leetcode分类-Leetcode:练习编码面试问题

    N-Queens II 平衡二叉树 二叉树中序遍历 二叉树最大路径和 将排序数组转换为二叉搜索树 将排序列表转换为二叉搜索树 将二叉树展平到链表 二叉树的最大深度 二叉树的最小深度 路径和 排列 排列二 在每个节点中填充下...

    leetcode中国-Leetcode:Leetcode的生活经历:)

    leetcode中国力码 我的 Leetcode 生活经历! 我创建了这个存储库来分享我对 leetcode 问题的解决方案。 另外,我会补充一下我在解决问题时的想法,也会补充一些简单的测试用例以供...N-Queens(硬) 56. 合并间隔(中)

    leetcode530-leetcode:我的leetcode解决方案

    leetcode 530 leetcode 我对 leetcode 的解决方案。 使用c++解决问题。 # 标题 解决方案 标签 方法 1185 一周中的天 大批 5499 检测长度模式重复 k 次或多次 大批 ...n-queens-ii DFS,搜索 1003 替

    leetcode信封-leet:我的leetcode练习的回购

    N-Queens 572 另一棵树的子树98 验证二叉搜索树1048 最长的字符串链101 对称树第151话第177话218 天际线问题242 有效字谜378 排序矩阵中的第 K 个最小元素第489章 扫地机器人406按高度重构队列592 分数加减法920 ...

    lrucacheleetcode-leetcode:个人刷leetcode遇到的一些题汇总(golang)

    比如n-queens-ii对应链接为: 题目 url add-two-numbers find-peak-element longest-common-subsequence longest-consecutive-sequence max-area-of-island next-greater-element-ii serialize-and-deserialize-...

    leetcode棋盘-Algorithms:通用算法实现

    leetcode 棋盘算法实现 有趣的算法或有趣的算法实现 动态规划(非常基础)/递归 ...nQueens.py 很少包含外部库,所以下面的就可以了。 编译任何 C 程序: gcc -o X Xc 执行 python 脚本: chmod 755 X.py --&gt; ./X.py

    javalruleetcode-leetcode-oo:我使用面向对象设计的leetcode实现

    N 个节点 中等的 20 有效括号 简单的 21 合并两个排序列表 简单的 22 生成括号 中等的 23 合并 k 个排序列表 难的 26 从排序数组中删除重复项 简单的 27 删除元素 简单的 30 连接所有单词的子串 难的 32 最长有效...

    最大公共字符串leetcode-LeetCodeSolultionBook:力码解决方案书

    最大公共字符串leetcode 这本书的在线版本可以在 [gitbook.com] 上查看 进步写作 104 二叉树的最大深度 111 二叉树的最小深度 174 地牢游戏 84 直方图中最大的矩形 85 最大矩形 198 强盗 第213话 第42章 截留雨水 11...

    leetcode2sumc-PlayLeetCode:力扣培训

    leetcode 2 和 c PlayLeetCode 基于c++的LeetCode训练 尖端: 单击问题的Number (#) 单击Solution ([00xx-Solution]) 到解决方案 # 标题 困难 方法 解决方案 ...N ...组合和II ...N-皇后 ...N-Queens II 难的

    leetcode中文版-lintcode:lintcode题解

    leetcode中文版lintcode题解 相关链接 目录 指数 标题 代码 困难 1 A + ...N-皇后 ...N-Queens II 中等的 35 反向链表 简单的 36 反向链表 II 中等的 37 反转 3 位整数 幼稚的 38 搜索二维矩阵 II 中等

    Leetcode:更大的LeetcodeLösungen

    49组Anagrams视频讲解50 Pow(x,n)视频讲解51 N-Queens视频讲解52 N-Queens II视频讲解53最大子数组视频讲解54螺旋矩阵视频讲解55跳转游戏视频讲解56合并间隔视频讲解57插入间隔视频讲解59螺旋矩

    javalruleetcode-JavaPractice:Java实践

    java lru leetcode Java实践 算法 ...N-Queens, N-Queens II 组合 子集 词搜索 格雷码 子集二 恢复 IP 地址 回文分区 添加和搜索词 - 数据结构设计 组合和III 加号 正则表达式匹配 断字二 两个整数相除

Global site tag (gtag.js) - Google Analytics