当前位置: 首页 > news >正文

【LeetCode 热题 100】全排列 / 子集 / 组合总和 / 分割回文串 / N 皇后

头像
⭐️个人主页:@小羊
⭐️所属专栏:LeetCode 热题 100
很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~

动图描述

目录

    • 全排列
    • 子集
    • 电话号码的字母组合
    • 组合总和
    • 括号生成
    • 单词搜索
    • 分割回文串
    • N 皇后


全排列

  • 全排列

在这里插入图片描述

class Solution {vector<vector<int>> res;vector<int> path;bool used[7] = {};int n;
public:vector<vector<int>> permute(vector<int>& nums) {n = nums.size();dfs(nums);return res;}void dfs(vector<int>& nums){if (path.size() == n){res.push_back(path);return;}for (int i = 0; i < n; i++){if (!used[i]){used[i] = true;path.push_back(nums[i]);dfs(nums);used[i] = false;path.pop_back();}}}
};

子集

  • 子集

在这里插入图片描述

class Solution {vector<vector<int>> res;vector<int> path;bool used[11] = {};int n;
public:vector<vector<int>> subsets(vector<int>& nums) {n = nums.size();dfs(nums, 0);return res;}void dfs(vector<int>& nums, int pos){res.push_back(path);for (int i = pos; i < n; i++){if (!used[i]){used[i] = true;path.push_back(nums[i]);dfs(nums, i + 1);used[i] = false;path.pop_back();}}}
};

电话号码的字母组合

  • 电话号码的字母组合

在这里插入图片描述

class Solution {string hash[10] = {"", "", "abc", "def","ghi","jkl","mno","pqrs","tuv","wxyz"};vector<string> res;string path;
public:vector<string> letterCombinations(string digits) {if (digits.empty()) return res;dfs(digits, 0);return res;}void dfs(string& digits, int pos){if (pos == digits.size()){res.push_back(path);return;}for (auto e : hash[digits[pos] - '0']){path += e;dfs(digits, pos + 1);path.pop_back();}}
};

组合总和

  • 组合总和

在这里插入图片描述

class Solution {vector<vector<int>> res;vector<int> path;int t;
public:vector<vector<int>> combinationSum(vector<int>& candidates, int target) {t = target;dfs(candidates, 0, 0);return res;}void dfs(vector<int>& candidates, int pos, int sum){if (sum == t){res.push_back(path);return;}else if (sum > t) return;for (int i = pos; i < candidates.size(); i++){path.push_back(candidates[i]);dfs(candidates, i, sum + candidates[i]);path.pop_back();}}
};

括号生成

  • 括号生成

在这里插入图片描述

class Solution {vector<string> res;string path;int left, right, m;
public:vector<string> generateParenthesis(int n) {m = n;dfs();return res;}void dfs(){if (right == m){res.push_back(path);return;}if (left < m){path += "(";left++;dfs();path.pop_back();left--;}if (right < left){path += ")";right++;dfs();path.pop_back();right--;}}
};

单词搜索

  • 单词搜索

在这里插入图片描述

class Solution {int dx[4] = {1, -1, 0, 0}, dy[4] = {0, 0, 1, -1};bool used[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]){if (dfs(board, word, i, j, 1)) return true;}}}return false;}bool dfs(vector<vector<char>>& board, string& word, int i, int j, int pos){if (pos == word.size()) return true;used[i][j] = 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 && !used[x][y] && board[x][y] == word[pos]){if (dfs(board, word, x, y, pos + 1)) return true;}}used[i][j] = false;return false;}
};

分割回文串

  • 分割回文串

在这里插入图片描述

class Solution {vector<vector<string>> res;vector<string> path;
public:vector<vector<string>> partition(string s) {dfs(s, 0);return res;}void dfs(string& s, int pos){if (pos == s.size()){res.push_back(path);return;}for (int i = pos; i < s.size(); i++){if (check(s, pos, i)){path.push_back(s.substr(pos, i - pos + 1));dfs(s, i + 1);path.pop_back();}}}bool check(string& s, int l, int r){while (l < r && s[l] == s[r]){l++, r--;}return l >= r;} 
};

N 皇后

  • N 皇后

在这里插入图片描述

class Solution {vector<vector<string>> res;vector<string> path;bool checkcol[10], checkdig1[20], checkdig2[20];int m;
public:vector<vector<string>> solveNQueens(int n) {m = n;path.resize(n);for (int i = 0; i < n; i++) path[i].append(n, '.');dfs(0);return res;}void dfs(int row){if (row == m){res.push_back(path);return;}for (int col = 0; col < m; col++) // 尝试在当前行放Q{if (!checkcol[col] && !checkdig1[col - row + m] && !checkdig2[col + row]){checkcol[col] = checkdig1[col - row + m] = checkdig2[col + row] = true;path[row][col] = 'Q';dfs(row + 1);checkcol[col] = checkdig1[col - row + m] = checkdig2[col + row] = false;path[row][col] = '.';}}}
};

本篇文章的分享就到这里了,如果您觉得在本文有所收获,还请留下您的三连支持哦~

头像
http://www.xdnf.cn/news/443845.html

相关文章:

  • Manus逆向工程:AI智能体的“思考”与“行动”
  • iOS审核问题及回复
  • 【计算机视觉】OpenCV实战项目:Face-Mask-Detection 项目深度解析:基于深度学习的口罩检测系统
  • 鸿蒙OSUniApp 开发实时聊天页面的最佳实践与实现#三方框架 #Uniapp
  • mysql数据库配置
  • NSSCTF [HNCTF 2022 WEEK4]
  • C盘清理(简单易懂)
  • 行政区划XML接口数据文件
  • 【Spark分析HBase数据】Spark读取并分析HBase数据
  • 高等数学第七章---微分方程(§7.1-§7.3微分方程概念、一阶微分方程、一阶微分线性方程)
  • Selenium-Java版(操作元素)
  • Android App View——团结引擎车机版实现安卓应用原生嵌入 3D 开发场景
  • 智能体制作学习笔记2——情感客服
  • openfeign 拦截器实现微服务上下文打通
  • 【Three.js基础学习】36.particles-morphing-shader
  • React 简介:核心概念、组件化架构与声明式编程
  • De-biased Attention Supervision for Text Classifcation with Causality
  • Beats
  • AI规则引擎:解锁SQL数据分析新姿势
  • rhce 9 考题与解析笔记
  • 16 - VDMA之视频转发实验
  • 用HBuilder运行小程序到微信开发者工具
  • SQL注入 ---04
  • OpenHarmony 开源鸿蒙南向开发——linux下使用make交叉编译第三方库——wget
  • 【C/C++】高阶用法_笔记
  • 负进制转换
  • 前端~三维地图(cesium)动态材质扩散圆环
  • 高等数学第七章---微分方程(§7.4-§7.5可降阶的高阶微分方程、二阶线性微分方程)
  • 在window中 js 编写一个全局触发事件并携带参数
  • EC600X 开发板介绍