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

泉州公司建设网站丰镇网站建设

泉州公司建设网站,丰镇网站建设,网站建设_app开发,手把手教你实现电商网站开发✨✨✨学习的道路很枯燥#xff0c;希望我们能并肩走下来! 文章目录 目录 文章目录 前言 一 排列、子集问题 1.1 全排列I 1.2 子集I 1.3 找出所有子集的异或总和 1.4 全排列II 1.5 字母大小写全排列 1.6 优美的排列 二 组合问题 2.1 电话号码的数字组合 … ✨✨✨学习的道路很枯燥希望我们能并肩走下来! 文章目录 目录 文章目录 前言 一  排列、子集问题 1.1  全排列I 1.2  子集I  1.3  找出所有子集的异或总和 1.4  全排列II 1.5  字母大小写全排列 1.6  优美的排列 二  组合问题  2.1  电话号码的数字组合 2.2  括号生成 2.3  组合  2.4  目标和 2.5  组合总和 三  矩阵搜索问题 3.1  N皇后  3.2  有效的数独 3.3  解数独  3.4  单词搜素 3.5  黄金矿工 3.6  不同路径III 总结 前言 本篇详细介绍了进一步介绍DFS让使用者对DFS有更加深刻的认知而不是仅仅停留在表面更好的模拟为了更好的使用. 文章可能出现错误如有请在评论区指正让我们一起交流共同进步 我们在做DFS的题目时首先要把决策树通过策略把结果不重不漏的枚举得到画下缕清思路设计代码自然水到渠成 一  排列、子集问题 1.1  全排列I 46. 全排列 - 力扣LeetCode class Solution {vectorvectorint ret;vectorint path;bool check[7]; public:vectorvectorint permute(vectorint nums) {dfs(nums);return ret;}void dfs(vectorint nums){if(path.size() nums.size()){ret.push_back(path);return;}for(int i 0;inums.size();i){if(check[i] false){path.push_back(nums[i]);check[i] true;dfs(nums);//回溯- 恢复现场path.pop_back();check[i] false;}}} }; 1.2  子集I  78. 子集 - 力扣LeetCode 解法一 class Solution {vectorvectorint ret;vectorint path; public:vectorvectorint subsets(vectorint nums) {dfs(nums,0);return ret;}void dfs(vectorint nums,int n){if(n nums.size()){ret.push_back(path);return;}//选path.push_back(nums[n]);dfs(nums,n1);path.pop_back();//不选dfs(nums,n1);} }; 解法二 class Solution {vectorvectorint ret;vectorint path; public:vectorvectorint subsets(vectorint nums) {dfs(nums,0);return ret;}void dfs(vectorint nums,int pos){ret.push_back(path);for(int i pos;inums.size();i){path.push_back(nums[i]);dfs(nums,i1);path.pop_back();}} }; 1.3  找出所有子集的异或总和 1863. 找出所有子集的异或总和再求和 - 力扣LeetCode class Solution {int sum;int path; public:int subsetXORSum(vectorint nums) {dfs(nums,0);return sum;}void dfs(vectorint nums,int pos){sum path;for(int i pos;inums.size();i){path^nums[i];dfs(nums,i1);path^nums[i]; }} }; 1.4  全排列II 47. 全排列 II - 力扣LeetCode class Solution {vectorvectorint ret;vectorint path;bool check[9]; public:vectorvectorint permuteUnique(vectorint nums) {sort(nums.begin(),nums.end());dfs(nums);return ret;}void dfs(vectorint nums){if(path.size() nums.size()){ret.push_back(path);return;}for(int i 0;inums.size();i){if(check[i] false (i0 || nums[i] ! nums[i-1] ||check[i-1] true)){path.push_back(nums[i]);check[i] true;dfs(nums);path.pop_back();check[i] false;}}} }; 1.5  字母大小写全排列 784. 字母大小写全排列 - 力扣LeetCode class Solution {vectorstring ret;string path; public:vectorstring letterCasePermutation(string s) {dfs(s,0);return ret;}void dfs(string s,int pos){if(pos s.size()){ret.push_back(path);return;}char ch s[pos];//不改变path ch;dfs(s,pos1);path.pop_back();//改变if(ch0 || ch9){char tmp change(ch);path tmp;dfs(s,pos1);path.pop_back();}}char change(char ch){if(chachz) ch-32;else ch32;return ch;} }; 1.6  优美的排列 526. 优美的排列 - 力扣LeetCode class Solution {bool check[16];int ret; public:int countArrangement(int n) {dfs(n,1);return ret;}void dfs(int n, int pos){if(pos n1){ret;return;}for(int i 1; in;i){if(check[i] false(i % pos 0 || pos % i 0)){check[i] true;dfs(n,pos1);check[i] false;}}} }; 二  组合问题  2.1  电话号码的数字组合 17. 电话号码的字母组合 - 力扣LeetCode class Solution {string path;vectorstring ret;vectorstring hash {,,abc,def,ghi,jkl,mno,pqrs,tuv,wxyz}; public:vectorstring letterCombinations(string digits) {if(digits.size() 0) return ret;dfs(digits,0);return ret;}void dfs(string digits,int pos){if(pos digits.size()){ret.push_back(path);return;}for(auto ch : hash[digits[pos] - 0]){path.push_back(ch);dfs(digits,pos1);path.pop_back();}} }; 2.2  括号生成 22. 括号生成 - 力扣LeetCode class Solution {vectorstring ret;string path;int count; //记录有效括号的对数 public:vectorstring generateParenthesis(int n) {count n;dfs(0,0);return ret;}void dfs(int left,int right){if(path.size() 2*count){ret.push_back(path);return;}if(leftcount){path.push_back(();dfs(left1,right);path.pop_back();}if(rightleft){path.push_back());dfs(left,right1);path.pop_back();}} }; 2.3  组合  77. 组合 - 力扣LeetCode class Solution {vectorvectorint ret;vectorint path;int n, k; public:vectorvectorint combine(int _n, int _k) {n _n;k _k;dfs(1);return ret;}void dfs(int pos){if(path.size() k){ret.push_back(path);return;}for(int i pos; in; i){path.push_back(i);dfs(i1);path.pop_back();}} }; 2.4  目标和 494. 目标和 - 力扣LeetCode class Solution {int ret;int target; public:int findTargetSumWays(vectorint nums, int _target) {target _target;dfs(nums,0,0);return ret;}void dfs(vectorint nums, int pos, int prev){if(pos nums.size()){if(prev target)ret;return;}dfs(nums,pos1,prevnums[pos]);dfs(nums,pos1,prev-nums[pos]);} }; 2.5  组合总和 39. 组合总和 - 力扣LeetCode 解法一 class Solution {vectorvectorint ret;vectorint path;int target; public:vectorvectorint combinationSum(vectorint candidates, int _target) {target _target;dfs(candidates,0,0);return ret;}void dfs(vectorint candidates,int sum, int pos){if(sumtarget) return;if(sum target){ret.push_back(path);return;}for(int i pos;icandidates.size();i){path.push_back(candidates[i]);dfs(candidates,sumcandidates[i],i);path.pop_back();}} }; 解法二 class Solution {vectorvectorint ret;vectorint path;int target; public:vectorvectorint combinationSum(vectorint candidates, int _target) {target _target;dfs(candidates,0,0);return ret;}void dfs(vectorint candidates,int sum, int pos){if(sum target){ret.push_back(path);return;}if(sumtarget || pos candidates.size()) return;for(int k 0;k*candidates[pos]sumtarget;k){if(k) path.push_back(candidates[pos]);dfs(candidates,sumk*candidates[pos],pos1);}for(int k 1;k*candidates[pos]sumtarget;k){path.pop_back();}} }; 三  矩阵搜索问题 3.1  N皇后  51. N 皇后 - 力扣LeetCode class Solution {bool checkCol[10], checkDig1[20], checkDig2[20];vectorvectorstring ret;vectorstring path; public:vectorvectorstring solveNQueens(int n) {path.resize(n);for(int i 0;in;i)path[i].append(n,.);dfs(n,0);return ret;}void dfs(int n, int row){if(row n){ret.push_back(path);return;}for(int col 0;coln;col){if(!checkCol[col]!checkDig1[row-coln]!checkDig2[rowcol]){path[row][col] Q;checkCol[col] checkDig1[row-coln] checkDig2[rowcol] true;dfs(n,row1);path[row][col] .;checkCol[col] checkDig1[row-coln] checkDig2[rowcol] false;}}} }; 3.2  有效的数独 36. 有效的数独 - 力扣LeetCode class Solution {bool row[9][10];bool col[9][10];bool grid[3][3][10]; public:bool isValidSudoku(vectorvectorchar board) {for(int i 0;i9;i){for(int j 0;j9;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.3  解数独  37. 解数独 - 力扣LeetCode class Solution {bool row[9][10];bool col[9][10];bool grid[3][3][10]; public:void solveSudoku(vectorvectorchar board) {for(int i 0;i9;i){for(int j 0;j9;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(vectorvectorchar board){for(int i 0;i9;i){for(int j 0;j9;j){if(board[i][j] .){for(int num 1; num9; num){if(!row[i][num]!col[j][num]!grid[i/3][j/3][num]){board[i][j] num 0;row[i][num] col[j][num] grid[i/3][j/3][num] true;if(dfs(board) true) return true; //判断当前所填的数是否有效board[i][j] .;row[i][num] col[j][num] grid[i/3][j/3][num] false;}}return false; //无法填数时则说明之前的填的数错误返回错误}}}return true;} }; 3.4  单词搜素 79. 单词搜索 - 力扣LeetCode class Solution {bool vis[7][7];int dx[4] {0,0,1,-1};int dy[4] {1,-1,0,0};int m,n; public:bool exist(vectorvectorchar board, string word) {m board.size(),n board[0].size();for(int i 0;im;i){for(int j 0;jn;j){if(board[i][j] word[0]){vis[i][j] true;if(dfs(board,word,i,j,1)) return true;vis[i][j] false;}}}return false;}bool dfs(vectorvectorchar board, string word,int i,int j,int pos){if(pos word.size()) return true;for(int k 0;k4;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,word,x,y,pos1)) return true;vis[x][y] false;}}return false;} }; 3.5  黄金矿工 1219. 黄金矿工 - 力扣LeetCode 本题的算法原理和单词搜索同只不过多了一两个变量 class Solution {bool vis[16][16];int dx [4] {0,0,1,-1};int dy [4] {1,-1,0,0};int m,n,path,ret; public:int getMaximumGold(vectorvectorint grid) {m grid.size(),n grid[0].size();for(int i 0;im;i){for(int j 0;jn;j){if(grid[i][j] ! 0){vis[i][j] true;dfs(grid,i,j,grid[i][j]);vis[i][j] false;}}}return ret;}void dfs(vectorvectorint 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,pathgrid[x][y]);vis[x][y] false;}}} }; 3.6  不同路径III 980. 不同路径 III - 力扣LeetCode class Solution {bool vis[21][21];int dx[4] {0,0,1,-1};int dy[4] {1,-1,0,0};int m,n,step;int ret; public:int uniquePathsIII(vectorvectorint grid) {int bx,by;m grid.size(),n grid[0].size();for(int i 0;im;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(vectorvectorint 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;}}} }; 总结 ✨✨✨各位读友本篇分享到内容是否更好的让你理解DFS如果对你有帮助给个赞鼓励一下吧 世上没有绝望的处境只有对处境绝望的人。 感谢每一位一起走到这的伙伴我们可以一起交流进步一起加油吧
http://www.hkea.cn/news/14509414/

相关文章:

  • 河北建设厅官方网站电话1150网站建设服务器主板
  • 奈曼旗华水建设工程公司网站招聘企业网站建设模块
  • 网站备案表格python编程软件手机版
  • 用织梦做的网站下载地址前端培训费用大概多少
  • dede的网站地图要怎么做建站代理
  • 网站开发实训总结致谢电商设计用什么软件
  • 建站用wordpress网络推广外包哪家好
  • 张家港企业网站设计定制网站建设公司
  • 网站开发语言在那看出来wordpress建站赚钱
  • 网上接网站做企业网站建设不足
  • 国外做宠物产品的网站不同域名指向同一网站
  • 淘宝网站建设可以申请赔款户外旅游网站排名
  • 做汽配外贸是在哪个网站做wordpress列表页模板
  • 备案网站多长时间网站设计专业有前途吗
  • 网站建设与管理中专怎样做网站
  • 大良网站制作公司鼓楼福州网站建设
  • 建设银行忘记密码网站企业如何做网站
  • 网站页面布局图延安网站建设
  • 全国信用网站一体化建设做网页的软件下载
  • 公司就我一个网站制作合肥网站优化
  • 企业网站开发php怎么做pdf电子书下载网站
  • 网站建设烟台做爰全程的网站
  • 可以做ps兼职的网站哪个云电脑好用又便宜
  • IT男网站建设免费做网站安全吗
  • 网站建设项目收获网站开发难不难学
  • 如何将自己做的网站变成中文快速网站推广工具
  • 如何申请建设网站首页wordpress加跳转
  • 苏州在线网站制作wordpress googleapis
  • 云南手机网站建设网站建设价格与哪些
  • 主机屋网站搭建设置免费咨询问题的网站