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

广州找人做网站wordpress伪静态失效

广州找人做网站,wordpress伪静态失效,网页设计与制作报告模板,wordpress主题模板 国人回溯法模板 void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {处理节点;backtracking(路径,选择列表); // 递归回溯,撤销处理结果} }理解 从…

回溯法模板

void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {处理节点;backtracking(路径,选择列表); // 递归回溯,撤销处理结果}
}

理解

 从图中看出for循环可以理解是横向遍历,backtracking(递归)就是纵向遍历,这样就把这棵树全遍历完了,一般来说,搜索叶子节点就是找的其中一个结果了

回溯法解决的问题都可以抽象为树形结构(N叉树),用树形结构来理解回溯就容易多了

第77题. 组合

 理解

回溯代码

class Solution {
private:vector<vector<int>> result; // 存放符合条件结果的集合vector<int> path; // 用来存放符合条件结果void backtracking(int n, int k, int startIndex) {if (path.size() == k) {result.push_back(path);return;}for (int i = startIndex; i <= n; i++) {path.push_back(i); // 处理节点 backtracking(n, k, i + 1); // 递归path.pop_back(); // 回溯,撤销处理的节点}}
public:vector<vector<int>> combine(int n, int k) {result.clear(); // 可以不写path.clear();   // 可以不写backtracking(n, k, 1);return result;}
};

剪枝操作

class Solution {
private:vector<vector<int>> result;vector<int> path;void backtracking(int n, int k, int startIndex) {if (path.size() == k) {result.push_back(path);return;}for (int i = startIndex; i <= n - (k - path.size()) + 1; i++) { // 优化的地方path.push_back(i); // 处理节点backtracking(n, k, i + 1);path.pop_back(); // 回溯,撤销处理的节点}}
public:vector<vector<int>> combine(int n, int k) {backtracking(n, k, 1);return result;}
};

216.组合总和III

思路

回溯算法

class Solution {
private:vector<vector<int>> result; // 存放结果集vector<int> path; // 符合条件的结果// targetSum:目标和,也就是题目中的n。// k:题目中要求k个数的集合。// sum:已经收集的元素的总和,也就是path里元素的总和。// startIndex:下一层for循环搜索的起始位置。void backtracking(int targetSum, int k, int sum, int startIndex) {if (path.size() == k) {if (sum == targetSum) result.push_back(path);return; // 如果path.size() == k 但sum != targetSum 直接返回}for (int i = startIndex; i <= 9; i++) {sum += i; // 处理path.push_back(i); // 处理backtracking(targetSum, k, sum, i + 1); // 注意i+1调整startIndexsum -= i; // 回溯path.pop_back(); // 回溯}}public:vector<vector<int>> combinationSum3(int k, int n) {result.clear(); // 可以不加path.clear();   // 可以不加backtracking(n, k, 0, 1);return result;}
};

剪枝操作

class Solution {
private:vector<vector<int>> result; // 存放结果集vector<int> path; // 符合条件的结果void backtracking(int targetSum, int k, int sum, int startIndex) {if (sum > targetSum) { // 剪枝操作return; // 如果path.size() == k 但sum != targetSum 直接返回}if (path.size() == k) {if (sum == targetSum) result.push_back(path);return;}for (int i = startIndex; i <= 9 - (k - path.size()) + 1; i++) { // 剪枝sum += i; // 处理path.push_back(i); // 处理backtracking(targetSum, k, sum, i + 1); // 注意i+1调整startIndexsum -= i; // 回溯path.pop_back(); // 回溯}}public:vector<vector<int>> combinationSum3(int k, int n) {result.clear(); // 可以不加path.clear();   // 可以不加backtracking(n, k, 0, 1);return result;}
};

17.电话号码的字母组合

 39. 组合总和

思路

回溯法代码

// 版本一
class Solution {
private:const string letterMap[10] = {"", // 0"", // 1"abc", // 2"def", // 3"ghi", // 4"jkl", // 5"mno", // 6"pqrs", // 7"tuv", // 8"wxyz", // 9};
public:vector<string> result;string s;void backtracking(const string& digits, int index) {if (index == digits.size()) {result.push_back(s);return;}int digit = digits[index] - '0';        // 将index指向的数字转为intstring letters = letterMap[digit];      // 取数字对应的字符集for (int i = 0; i < letters.size(); i++) {s.push_back(letters[i]);            // 处理backtracking(digits, index + 1);    // 递归,注意index+1,一下层要处理下一个数字了s.pop_back();                       // 回溯}}vector<string> letterCombinations(string digits) {s.clear();result.clear();if (digits.size() == 0) {return result;}backtracking(digits, 0);return result;}
};

思路

回溯算法

// 版本一
class Solution {
private:vector<vector<int>> result;vector<int> path;void backtracking(vector<int>& candidates, int target, int sum, int startIndex) {if (sum > target) {return;}if (sum == target) {result.push_back(path);return;}for (int i = startIndex; i < candidates.size(); i++) {sum += candidates[i];path.push_back(candidates[i]);backtracking(candidates, target, sum, i); // 不用i+1了,表示可以重复读取当前的数sum -= candidates[i];path.pop_back();}}
public:vector<vector<int>> combinationSum(vector<int>& candidates, int target) {result.clear();path.clear();backtracking(candidates, target, 0, 0);return result;}
};

优化代码

 对总集合排序之后,如果下一层的sum(就是本层的 sum + candidates[i])已经大于target,就可以结束本轮for循环的遍历

在求和问题中,排序之后加剪枝是常见的套路!

class Solution {
private:vector<vector<int>> result;vector<int> path;void backtracking(vector<int>& candidates, int target, int sum, int startIndex) {if (sum == target) {result.push_back(path);return;}// 如果 sum + candidates[i] > target 就终止遍历for (int i = startIndex; i < candidates.size() && sum + candidates[i] <= target; i++) {sum += candidates[i];path.push_back(candidates[i]);backtracking(candidates, target, sum, i);sum -= candidates[i];path.pop_back();}}
public:vector<vector<int>> combinationSum(vector<int>& candidates, int target) {result.clear();path.clear();sort(candidates.begin(), candidates.end()); // 需要排序backtracking(candidates, target, 0, 0);return result;}
};

http://www.yayakq.cn/news/716466/

相关文章:

  • 网站怎样绑定域名访问服务品牌策划方案
  • 旅游网站开发目标wordpress写文章页面无法显示
  • 海外访问国内网站 dns东莞市自然资源局官网
  • 平顶山住房和城乡建设局网站c 微信网站开发
  • 网站开发人员需要去做原型吗598网站建设
  • 免费网站入口网站免费进ps软件四合一网站建设源码
  • 网站开发公司经营范围怎么写珠海网站建设 超凡科技
  • 深圳营销型网站建设服务费用wordpress企业能用吗
  • 传奇网页版在线玩seo全网推广
  • 淘宝优惠券怎么做网站南京建设企业网站的公司
  • 郴州建设网站的公司做素材网站服务器
  • 网牛网站建设中卫网站建站设计
  • 做网站销售 优帮云凤凰军事新闻最新消息
  • 微网站搭建流程二级医院做网站
  • 成都网站建设司代码生成器手机版
  • 网站 报价方案东莞网站(建设信科网络)
  • 汕头市建设局造价信息网站能免费做封面的网站
  • 宜春网站建设联系方式wordpress 调用中等图片
  • 网站做预览文档哪个网站可以免费下载电视剧看
  • 什么网站可以找人做设计网站策划书ppt
  • h5网站做微信公众号网站建设 人天价格
  • 网站策划书我与音乐seo教程正规化岚鸿
  • 静态后台管理网站模板天津建设工程信息网评标专家怎么查询评审项目
  • 建站公司外贸营销网站建设需要多少钱
  • 网站可以换主机吗网站开发流程龙岩
  • 网站备案 改名自媒体营销
  • 百度智能云网站建设在谷歌上做英文网站
  • 信用网站建设清远清城区
  • 查询网站空间的服务商广州注册公司的流程及费用
  • o2o网站咋建设线上推广有哪些方式