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

400电话网站模板seo排名优化联系13火星软件

400电话网站模板,seo排名优化联系13火星软件,互联网软件门户网站,wordpress主题怎么写代码随想录算法训练营 —day22 文章目录 代码随想录算法训练营前言回溯算法理论基础回溯法解决的问题回溯法模板 一、77. 组合二、216. 组合总和 III三、17. 电话号码的字母组合总结 前言 今天是算法营的第22天,希望自己能够坚持下来! 今日任务&#x…

代码随想录算法训练营

—day22

文章目录

  • 代码随想录算法训练营
  • 前言
  • 回溯算法理论基础
    • 回溯法解决的问题
    • 回溯法模板
  • 一、77. 组合
  • 二、216. 组合总和 III
  • 三、17. 电话号码的字母组合
  • 总结


前言

今天是算法营的第22天,希望自己能够坚持下来!
今日任务:
● 回溯算法理论基础
● 77. 组合
● 216.组合总和III
● 17.电话号码的字母组合


回溯算法理论基础

文章讲解

在这里插入图片描述

  • 回溯法也可以叫做回溯搜索法,它是一种搜索的方式。
  • 回溯是递归的副产品,只要有递归就会有回溯。
  • 回溯的本质是穷举,是一种纯暴力的方法,嵌套多个for循环 回溯法解决的问题都可以抽象为树形结构
  • 回溯的递归函数一般叫backtracking,返回值一般为void,参数比较多,没那么容易确定下来,所以一般是先写逻辑,然后需要什么参数,就填什么参数。

回溯法解决的问题

  • 组合问题:N个数里面按一定规则找出k个数的集合
  • 切割问题:一个字符串按一定规则有几种切割方式
  • 子集问题:一个N个数的集合里有多少符合条件的子集
  • 排列问题:N个数按一定规则全排列,有几种排列方式
  • 棋盘问题:N皇后,解数独等等

回溯法模板

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

一、77. 组合

题目链接
文章讲解
视频讲解

在这里插入图片描述

思路:

  1. 递归函数的参数和返回值:参数:n,k,startIndex(每一层递归需要避开已经遍历过的数,所以需要一个索引去记录遍历到[1,n]的那个数字了)
  2. 终止条件:存下来的path大小已经满足k了
  3. 单层递归的逻辑:for循环遍历[1,n],添加单个数字到path中,再递归添加下一个数字(startIndex+1)。
  4. 剪枝:其实单层遍历的时候不需要遍历满[1,n],当遍历到剩下的数字个数已经不足以组成k个的时候已经不需要再遍历了,所以在for循环中,使用i < n - (k - 目前存的个数) + 1,这里+1是因为范围包含了startIndex
class Solution {
public:vector<int> path;vector<vector<int>> result;void backtracking(int n, int k, int startIndex) {//当组合大小满足k时放入结果集if (path.size() == k) {result.push_back(path);return;}//遍历[1,n]依次寻找结果集, 遍历到剩余元素个数不足以满足k的时候就可以停了for (int i = startIndex; i <= n - (k - path.size()) + 1;  i ++) {path.push_back(i); //放入ibacktracking(n, k, i + 1); //寻找跟i能满足k的组合,并且传入遍历的起始下标path.pop_back(); //取出i}return;}vector<vector<int>> combine(int n, int k) {backtracking(n, k, 1);return result;}
};

二、216. 组合总和 III

题目链接
文章讲解
视频讲解

跟77. 组合 其实就是多了个和的约束,思路是差不多的。并且要注意题目说只用数字1到9。

思路:

  1. 递归函数参数以及返回值:参数:n,k,startIndex(每一层递归需要避开已经遍历过的数,所以需要一个索引去记录遍历到[1,n]的那个数字了)
  2. 终止条件:path大小满足k的时候终止,判断总和是否为n,是则加入结果集。
  3. 单层处理逻辑:for循环遍历[1,9],添加单个数字到path中,再递归添加下一个数字(startIndex+1)。
  4. 剪枝:跟77. 组合 一样,for循环中只需要到i < n - (k - 目前存的个数) + 1,并且总和大于n了也可以直接返回,不需要再遍历了。

代码如下:

class Solution {
public:vector<int> path;vector<vector<int>> result;void backtracking (int k, int n, int sum, int startIndex) {if (sum > n) return; //剪枝,超过目标总和了直接返回if (path.size() == k) { //组合大小满足的就要返回,没必要继续下去了if (sum == n) result.push_back(path); //组合大小满足,总和也满足才加入结果集return;}//遍历[1,n]依次寻找结果集, 遍历到剩余元素个数不足以满足k的时候就可以停了,题目要求只使用数字19for (int i = startIndex; i <= 9 - (k - path.size()) + 1; i ++) {sum += i;path.push_back(i);backtracking(k, n, sum, i + 1);//寻找跟i能满足k的组合,并且传入遍历的起始下标和目前的总和path.pop_back();sum -= i;}return;}vector<vector<int>> combinationSum3(int k, int n) {backtracking(k, n, 0, 1);return result;}
};

三、17. 电话号码的字母组合

题目链接
文章讲解
视频讲解

思路:
需要有一个数组来存下每个数字对应的字母,用一个string[],用下标对应数字,string对应字符串。

递归思路:

  1. 递归函数参数以及返回值:参数:digits,Index(这个索引是告诉递归函数遍历到了digits的那个数字)
  2. 终止条件:当遍历完digits时终止,将目前存的string放入结果集。
  3. 单层处理逻辑:for循环遍历digits[Index]对应的字符串,添加单个字母到string中,再递归添加下一个数字对应的字母(index+1)。
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 (string &digits, int index) {if (index == digits.size()) { //当遍历完digits字母时终止并保存结果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因为下一层是处理digits的下一个字母了s.pop_back(); //回溯}}vector<string> letterCombinations(string digits) {s.clear();result.clear();if (digits.size() == 0) return result;backtracking(digits, 0);return result;}
};

总结

今天主要学习了回溯算法的理论和其中解决组合类的题目。

  • 回溯算法是一种纯暴力的方法,嵌套多个for循环
  • 回溯法解决的问题都可以抽象为树形结构
  • 组合类的题目需要使用一个索引去告诉函数遍历到哪里了

明天继续加油!

http://www.mmbaike.com/news/30515.html

相关文章:

  • 辽宁自助网站建设公司产品销售方案与营销策略
  • wordpress心理教育网站生活中的网络营销有哪些
  • 学校网站建设的申请如何做百度搜索推广
  • 做创新方法工作的网站百度如何投放广告
  • tech域名可以做网站吗南宁哪里有seo推广厂家
  • 做学校教务处网站网店运营推广平台
  • 类似头条的网站怎么做知乎怎么申请关键词推广
  • ui展示 网站网站制作专业
  • 什么是大型门户网站网站点击排名优化
  • 杭州营销型网站大连网站优化
  • 西安优化排名推广云南seo
  • 做动态网站需要那些技术重庆网站快速排名优化
  • 电商网站产品模块营销型网站建设多少钱
  • 网站的搜索功能一般怎么做长沙百度网站优化
  • 沈阳网页设计培训优化网站排名解析推广
  • 网站打开风险怎么解决谷歌chrome手机版
  • wordpress 中文 模板下载搜索引擎优化岗位
  • 泉州最专业手机网站建设开发谷歌浏览器下载
  • 爱站网seo培训小程序开发模板
  • 微博如何做外链到时自己网站企业培训师资格证报考2022
  • 带后台的响应式网站seo优化点击软件
  • 织梦源码网站建设好了后登录不了网站软件下载大全
  • 专门做网站的公司 南阳东莞seo网站制作报价
  • 做网站有哪些导航条优化关键词排名工具
  • 阿里建站官网seo优化顾问
  • 什么网站可以看女人唔易做平面设计培训
  • 东莞主页网站制作郑州seo线下培训
  • 医程通 网站做的太如何自己做一个网站
  • 在上海找工作用哪个招聘网好网站优化网站优化
  • 多商户商城小程序源码天天seo伪原创工具