穷举vs暴搜vs深搜vs回溯vs剪枝(三)

embedded/2024/10/23 6:52:30/

文章目录

  • 字母大小写全排列
  • 优美的排列
  • N 皇后
  • 有效的数独

字母大小写全排列

题目:字母大小写全排列

在这里插入图片描述
思路

对每个位置的字符有两种情况

  • 不修改:数字字符,直接递归下一层;
  • 修改:字母字符,大写改小写、小写改大写后,递归下一层;

C++代码

class Solution 
{string path;vector<string> ret;
public:vector<string> letterCasePermutation(string s) {dfs(s, 0);return ret;}void dfs(string& s, int pos){if(pos == s.size()){ret.push_back(path);return;}int ch = s[pos];// 不改变path.push_back(ch);dfs(s, pos + 1);path.pop_back();// 改变if(ch < '0' || ch > '9'){char t = change(ch);path.push_back(t);dfs(s, pos + 1);path.pop_back();}}char change(char ch){if(ch >= 'a' && ch <= 'z') ch -= 32;else ch += 32;return ch;}
};

优美的排列

题目:优美的排列

在这里插入图片描述
思路

我们可以使用回溯法解决本题,从左向右依次向目标排列中放入数即可

  • 使用 check数组来跟踪哪些数字已经被使用过。
  • 在每次递归中,检查当前排列是否符合优美排列的条件。
  • 基于回溯生成所有排列: 在排列中逐步填充数字,并检查每一步是否满足条件。
  • 统计符合条件的排列数量。

C++代码

class Solution 
{bool check[16];int ret;
public:int countArrangement(int n) {// 从下表为 1 开始枚举dfs(1, n);return ret;}void dfs(int pos, int n){if(pos == n + 1){ret++;return;}for(int i = 1; i <= n; i++){if(!check[i] && (pos % i == 0 || i % pos == 0)){check[i] = true;dfs(pos + 1, n);check[i] = false;}}}
};

N 皇后

题目:N 皇后

在这里插入图片描述
思路

在第一行放置第一个皇后,然后遍历棋盘的第二行,在合法的位置放置第二个皇后,再遍历第三行,以此类推,直到放置了n个皇后为止

  • 从第一行开始,尝试在每一列放置皇后
  • 对于每个放置位置,检查该位置的列和两个对角线是否已经被占用
  • 如果该位置未被占用,则放置皇后,并标记相应的列和对角线为已占用
  • 递归地尝试在下一行放置皇后
  • 如果在当前行无法放置皇后(即所有列和对角线都被占用),则回溯,撤销上一行的皇后放置,并尝试在当前行的下一个位置放置皇后
  • 当所有行都成功放置了皇后时,保存当前排列

C++代码

class Solution 
{bool checkCol[10], checkDig1[20], checkDig2[20];vector<vector<string>> ret;vector<string> path;int n;
public:vector<vector<string>> solveNQueens(int _n) {n = _n;path.resize(n, string(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[row-col+n] && !checkDig2[row+col]){path[row][col] = 'Q';checkCol[col] = checkDig1[row - col + n] = checkDig2[row + col] = true;dfs(row + 1);path[row][col] = '.';checkCol[col] = checkDig1[row - col + n] = checkDig2[row + col] = false;}}}
};

有效的数独

题目:有效的数独

在这里插入图片描述
思路

  • 遍历棋盘的每一个格子
  • 如果当前格子不是空字符.,则提取该字符代表的数字board[i][j] - '0'
  • 检查这个数字在当前行、当前列和当前3x3子网格中是否已经出现过(通过查看row[i][num]col[j][num]grid[i/3][j/3][num]是否为0
  • 如果这个数字在任何一处已经出现过,则返回false,表示数独无效
  • 如果这个数字在所有检查的地方都未出现过,则将其在rowcolgrid中标记为已出现过(即将相应的位置设为1
  • 如果遍历完所有格子都没有发现重复数字,则返回true,表示数独有效

C++代码

class Solution 
{int row[9][10];int col[9][10];int 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]){row[i][num] = col[j][num] = grid[i/3][j/3][num]=1;}else return false;}}}return true;}
};

http://www.ppmy.cn/embedded/129756.html

相关文章

速盾:cdn能加速游戏吗?

CDN&#xff08;内容分发网络&#xff09;是一种通过分布在全球不同地区的服务器来缓存和传输网络内容的技术。它的主要目的是提高内容的传输速度和用户体验。虽然CDN主要用于加速网站的访问和内容传输&#xff0c;但它也可以应用于游戏加速。 在传统的在线游戏中&#xff0c;…

ctfshow - web入门- web29

分析&#xff1a;参数c正则匹配查询flag&#xff0c;没有则执行eval($c)。 解题&#xff1a;eval函数为该题中的解题点&#xff0c;eval函数会将字符串当做php代码来执行&#xff0c;所以要得到flag&#xff0c;只需要在传参过程中执行查询flag的命令&#xff0c;且字符串中不…

使用docker build自制flink镜像供k8s使用

1、创建一个空目录专门用于自制docker镜像 mkdir -p /opt/module/flink-docker 2、将符合项目要求的本地flink拷贝到目录 cp -r /opt/module/flink-1.16.3 /opt/module/flink-dockercd /opt/module/flink-dockermv flink-1.16.3 flink 3、编写Dockerfile文件 FROM m.daocl…

整理一下实际开发和工作中Git工具的使用 (持续更新中)

介绍一下Git 在实际开发和工作中&#xff0c;Git工具的使用可以说是至关重要的&#xff0c;它不仅提高了团队协作的效率&#xff0c;还帮助开发者有效地管理代码版本。以下是对Git工具使用的扩展描述&#xff1a; 版本控制&#xff1a;Git能够跟踪代码的每一个修改记录&#x…

51单片机的仓库管理系统【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块温湿度传感器人体红外传感器掉电保存模块按键、LED、蜂鸣器等模块构成。适用于仓库环境监控等相似项目。 可实现功能: 1、LCD1602实时显示商品库存、仓库温湿度和安全情况 2、人体红外传感器&#xff08;按键模拟…

python 深度学习 项目调试 图像分割 detectron2

起因&#xff0c; 目的: 继续调试深度学习项目。 目标是&#xff0c;先调试10个项目。就是练练手。 项目介绍 项目来源: https://github.com/facebookresearch/detectron2项目目的: 图像处理&#xff0c;目标检测牛逼的地方: facebook 出品 30.3k star. 安装过程: 这个项…

Pytest参数详解 — 基于命令行模式!

1、--collect-only 查看在给定的配置下哪些测试用例会被执行 2、-k 使用表达式来指定希望运行的测试用例。如果测试名是唯一的或者多个测试名的前缀或者后缀相同&#xff0c;可以使用表达式来快速定位&#xff0c;例如&#xff1a; 命令行-k参数.png 3、-m 标记&#xff08;…

深度学习系列——RNN/LSTM/GRU,seq2seq/attention机制

1、RNN/LSTM/GRU可参考&#xff1a; https://zhuanlan.zhihu.com/p/636756912 &#xff08;1&#xff09;对于这里面RNN的表示中&#xff0c;使用了输入x和h的拼接描述&#xff0c;其他公式中也是如此 &#xff08;2&#xff09;各符号图含义如下 2、关于RNN细节&#xff0c;…