leetcode算法题之递归--综合练习(二)

本章目录

  • 1.N皇后
  • 2.有效的数独
  • 3.解数独
  • 4.单词搜索
  • 5.黄金矿工
  • 6.不同路径III

1.N皇后

N皇后
在这里插入图片描述

class Solution {
    vector<vector<string>> ret;
    vector<string> path;
    int n;
    bool checkCol[10],checkDig1[20],checkDig2[20];
public:
    vector<vector<string>> solveNQueens(int _n) {
        n = _n;
        //初始化path
        path.resize(n);
        for(int i=0;i<n;i++)
        {
            path[i].append(n,'.');
        }
        dfs(0);
        return ret;
    }
    void dfs(int row)
    {
        if(row == n)
        {
            ret.push_back(path);
            return;
        }
        for(int col = 0;col<n;col++)
        {
            if(!checkCol[col]&& !checkDig1[col-row+n] && !checkDig2[col+row])
            {
                path[row][col] = 'Q';
                checkCol[col] = checkDig1[col-row+n] = checkDig2[col+row] = true;
                dfs(row+1);
                path[row][col] = '.';
                checkCol[col] = checkDig1[col-row+n] = checkDig2[col+row] = false;
            }
        }
    }
};

2.有效的数独

有效的数独
在这里插入图片描述

class Solution {
    bool row[9][10];
    bool col[9][10];
    bool grid[3][3][10];
public:
    bool isValidSudoku(vector<vector<char>>& board) {
        for(int i=0;i<9;i++)
        {
            for(int j=0;j<9;j++)
            {
                if(board[i][j]!='.')
                {
                    int num = board[i][j]-'0';
                    if(row[i][num] || col[j][num] || grid[i/3][j/3][num])
                    {
                        return false;
                    }
                    row[i][num] = col[j][num] = grid[i/3][j/3][num] = true;
                }
            }
        }
        return true;
    }
};

3.解数独

解数独
在这里插入图片描述

class Solution {
    bool row[9][10];
    bool col[9][10];
    bool grid[3][3][10];
public:
    void solveSudoku(vector<vector<char>>& board) {
        //初始化一下row,col,grid数组
        for(int i=0;i<9;i++)
        {
            for(int j=0;j<9;j++)
            {
                if(board[i][j]!='.')
                {
                    int num = board[i][j]-'0';
                    row[i][num] = col[j][num] = grid[i/3][j/3][num] = true;
                }
            }
        }
        dfs(board);
    }
    bool dfs(vector<vector<char>>& board)
    {
        for(int i=0;i<9;i++)
        {
            for(int j=0;j<9;j++)
            {
                if(board[i][j]=='.')
                {
                    for(int k=1;k<=9;k++)
                    {
                        if(!row[i][k] && !col[j][k] && !grid[i/3][j/3][k])
                        {
                            board[i][j] = '0'+k;
                            row[i][k] = col[j][k] = grid[i/3][j/3][k] = true;
                            if(dfs(board) == true) return true;
                            board[i][j] = '.';
                            row[i][k] = col[j][k] = grid[i/3][j/3][k] = false;
                        }
                    }
                    return false;
                }
            }
        }
        return true;
    }
};

4.单词搜索

单词搜索
在这里插入图片描述

class Solution {
    int dx[4] = {0,0,1,-1};
    int dy[4] = {1,-1,0,0};
    bool vis[7][7];
    int m,n;
public:
    bool exist(vector<vector<char>>& board, string word) {
        m = board.size(), n = board[0].size();
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(board[i][j] == word[0])
                {
                    vis[i][j] = true;
                    if(dfs(board,i,j,word,1)==true) return true;
                    vis[i][j] = false;
                }
            }
        }
        return false;
    }

    bool dfs(vector<vector<char>>& board,int i,int j,string& word,int pos)
    {
        if(pos == word.size())
        {
            return true;
        }
        for(int k=0;k<4;k++)
        {
            int x = i+dx[k],y = j+dy[k];
            if(x>=0 && x<m && y>=0 && y<n && !vis[x][y]&& board[x][y] == word[pos])
            {
                vis[x][y] = true;
                if(dfs(board,x,y,word,pos+1)) return true;
                vis[x][y] = false;
            }
        }
        return false;
    }
};

5.黄金矿工

黄金矿工
在这里插入图片描述

class Solution {
    int dx[4] = {0,0,1,-1};
    int dy[4] = {1,-1,0,0};
    bool vis[16][16];
    int m,n;
    int ret = 0;
public:
    int getMaximumGold(vector<vector<int>>& grid) {
        //暴搜,每个点都进行一次深搜
        m = grid.size(),n = grid[0].size();
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(grid[i][j])
                {
                    vis[i][j] = true;
                    dfs(grid,i,j,grid[i][j]);
                    vis[i][j] = false;
                }
            }
        }
        return ret;
    }

    void dfs(vector<vector<int>>& grid,int i,int j,int path)
    {
        ret = max(ret,path);
        for(int k=0;k<4;k++)
        {
            int x = i+dx[k],y = j+dy[k];
            if(x>=0 && x<m && y>=0 && y<n && !vis[x][y] && grid[x][y]!=0)
            {
                vis[x][y] = true;
                dfs(grid,x,y,path+grid[x][y]);
                vis[x][y] = false;
            }
        }
    }
};

6.不同路径III

不同路径III
在这里插入图片描述

class Solution {
    int dx[4] = {0,0,1,-1};
    int dy[4] = {1,-1,0,0};
    vector<vector<bool>> vis;
    int m,n,step;
    int ret;
public:
    int uniquePathsIII(vector<vector<int>>& grid) {
        m = grid.size(),n = grid[0].size();
        vis = vector<vector<bool>>(m,vector<bool>(n));
        int bx,by;
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(grid[i][j] == 0) step++;
                else if(grid[i][j] == 1)
                {
                    bx = i;
                    by = j;
                }
            }
        }
        step += 2;
        vis[bx][by] = true;
        dfs(grid,bx,by,1);
        return ret;
    }

    void dfs(vector<vector<int>>& grid,int i,int j,int count)
    {
        if(grid[i][j] == 2)
        {
            if(count == step) ret++;
            return;
        }
        for(int k=0;k<4;k++)
        {
            int x = i+dx[k],y = j+dy[k];
            if(x>=0&&x<m&&y>=0&&y<n&&!vis[x][y] && grid[x][y]!=-1)
            {
                vis[x][y] = true;
                dfs(grid,x,y,count+1);
                vis[x][y] = false;
            }
        }
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/300222.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

1018:奇数偶数和1028:I love 闰年!和1029:三角形判定

1018&#xff1a;奇数偶数 要求&#xff1a;输入一个整数&#xff0c;判断该数是奇数还是偶数。如果该数是奇数就输出“odd”&#xff0c;偶数就输出“even”&#xff08;输出不含双引号&#xff09;。 输入样例&#xff1a;8 输出样例&#xff1a;even 程序流程图&#xff1a…

解决Canvas画图清晰度问题

最近在开发Web端远程桌面的时候遇到的一个问题&#xff0c;解决记录一下&#xff0c;分享给各位有需要用到的朋友。 先吹下水&#xff1a;远程桌面的连接我们是通过Websocket连接后&#xff0c;后端不断返回远程端的界面二进制数据流&#xff0c;我接收到之后转为图像&#xf…

MySQL练习-DDL语法练习

文章目录 1、数据库操作2、表操作3、DDL数据类型 突然想起来好久没写过SQL了&#xff0c;写一下SQL练习一下&#x1f60a; 个人写sql比较喜欢用小写&#x1f601; 什么是DDL&#xff1a;DDL是对数据库和表的操作 在这里练习DLL的时候先不添加约束&#xff0c;后面会把约束集中…

YOLOv8模型yaml结构图理解(逐层分析)

前言 YOLO-V8&#xff08;官网地址&#xff09;&#xff1a;https://github.com/ultralytics/ultralytics 一、yolov8配置yaml文件 YOLOv8的配置文件定义了模型的关键参数和结构&#xff0c;包括类别数、模型尺寸、骨架&#xff08;backbone&#xff09;和头部&#xff08;hea…

迟到的总结:回望 2023 年,期盼 2024 新机会、新挑战

&#x1f52d; 嗨&#xff0c;您好 &#x1f44b; 我是 vnjohn&#xff0c;在互联网企业担任 Java 开发&#xff0c;CSDN 优质创作者 &#x1f4d6; 推荐专栏&#xff1a;Spring、MySQL、Nacos、RocketMQ&#xff0c;后续其他专栏会持续优化更新迭代 &#x1f332;文章所在专栏…

2023湾区产城创新大会:培育数字化供应链金融新时代

2023年12月26日&#xff0c;由南方报业传媒集团指导&#xff0c;南方报业传媒集团深圳分社主办的“新质新力——2023湾区产城创新大会”在深圳举行。大会聚集里国内产城研究领域的专家学者以及来自产业园区、金融机构、企业的代表&#xff0c;以新兴产业发展为议题&#xff0c;…

Proteus 各版本安装指南

Proteus下载链接 https://pan.baidu.com/s/1vHgg8jK9KSHdxSU9SDy4vQ?pwd0531 1.鼠标右击【Proteus8.15(64bit&#xff09;】压缩包&#xff08;win11及以上系统需先点击“显示更多选项”&#xff09;【解压到Proteus8.15(64bit&#xff09; 】。 2.打开解压后的文件夹&#…

FastDFS安装与测试

目录 目标 版本 环境 官方文档 相关概念 安装FastDFS 启动FastDFS 关闭FastDFS 重启FastDFS 用命令测试上传文件 用命令测试下载文件 用命令测试删除文件 用HTTP的方式访问FastDFS中的文件 用HTTP的方式访问FastDFS中的文件整体流程 目标 在Linux服务器上搭建单…

遇见未来的你——感谢你带给我的感悟

目录 一、背景介绍二、思路&方案三、过程1.都说有的人出生就在罗马而有的人却用一辈子都在去向罗马的路上1.1.物质&#xff1a;1.2.精神&#xff1a; 2.做事情要看大再看细3.心存善念&#xff0c;常怀感恩&#xff0c;从小事做起4.所谓的面子在母爱面前像是一粒微尘5.讲道理…

React 中条件渲染的 N 种方法

本文作者系360奇舞团前端开发工程师 条件渲染在React开发中非常重要的功能&#xff0c;它允许开发人员根据条件控制渲染的内容&#xff0c;在创建动态和交互式用户界面方面发挥着至关重要的作用&#xff0c;本文总结了常用的的条件渲染方法。 1.If-else if-else是一种控制流程的…

qt自定义控件的封装

刚学了一个很有意思的东西,前面学了list,Tree,Table三大控件和一部分常用基础控件,但感觉没啥意思,就是用别人的直接用,刚学了一个自定义控件的封装,流程如下: 想把两个不相关的组件封装在一块,直接用ui不行,所以先新添加了qt设计师页面,新添加了一个SmallWidget *ui 在smal…

SLURM作业管理系统之3种作业提交方式

文章目录 前言定义基本概念三种作业提交模式1. 批处理作业&#xff08;采用 sbatch 命令提交&#xff09;2. 交互式作业提交&#xff08;采用 srun 命令提交&#xff09;3. 分配模式作业&#xff08;采用 salloc 命令提交&#xff09; 管理节点部署Slurm常用命令 前言 在高性能…

unity 游戏开发中傻傻分不清URP、HDRP和SRP

文章目录 **URP (Universal Render Pipeline)**:**HDRP (High Definition Render Pipeline)**:**区别**&#xff1a; Unity的URP&#xff08;Universal Render Pipeline&#xff09;和HDRP&#xff08;High Definition Render Pipeline&#xff09;都是基于SRP&#xff08;Scri…

k8s yaml文件pod的生命周期

Pod是k8s中最小限额资源管理组件&#xff0c;也是最小化运行容器化的应用的资源管理对象。 Pod是一个抽象的概念&#xff0c;可以理解为一个或者多个容器化应用的集合。 在一个pod当中运行一个容器是最常用的方式。 在一个pod当中同时运行多个容器&#xff0c;在一个pod当中…

2024阿里云服务器可用区选择方法

阿里云服务器地域和可用区怎么选择&#xff1f;地域是指云服务器所在物理数据中心的位置&#xff0c;地域选择就近选择&#xff0c;访客距离地域所在城市越近网络延迟越低&#xff0c;速度就越快&#xff1b;可用区是指同一个地域下&#xff0c;网络和电力相互独立的区域&#…

Strict MIME type checking is enforced for module scripts per HTML spec.

目录 前言错误信息如下:前言 最近使用docker打包Nginx和vue 为镜像文件,启动镜像时报错 错误信息如下: index89886.js:1 Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of "text/html". Stri…

labelme的安装

首先尝试在(openmmlab)的python3.8的环境下安装&#xff08;失败&#xff09;。应该是我环境其他部分不对&#xff0c;和python版本应该没什么关系。&#xff08;后续&#xff0c;创建新的环境后成功&#xff0c;可直接看最后一部分。&#xff09; 首先安装是没问题的 pip in…

Linux文件操作命令(touch、cat、more、cp、mv、rm)

之前我们学习了对目录&#xff08;即文件夹的操作&#xff0c;那么现在我们来一起看一下怎么操作文件吧&#xff09; 1.touch命令 功能&#xff1a;创建文件 语法&#xff1a;touch 参数 参数&#xff1a;被创建的文件路径 注意&#xff1a;touch命令无选项&#xff0c;参…

智能合约:3分钟开发ERC20 token(2)

0.前言 上一节我们讲到了开发智能合约的准备工作&#xff0c;以及在线编程平台remix 智能合约&#xff08;1&#xff09; 这一节讲解如何开发、发行一个代币&#xff0c;并具备包括代币铸造mint&#xff0c;转账transfer和销毁burn功能&#xff0c;并确保合约拥有者owner的权限…

autodl学术加速

今天使用autodl加载预训练BERT模型失败&#xff0c;在官方文档里面找到了官方给的代理使用方法。 直接在bash输入&#xff1a; 开启学术加速&#xff1a; source /etc/network_turbo取消学术加速&#xff1a; unset http_proxy && unset https_proxy据说是只能访问这…