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

做淘宝客网站性质单位网站备案

做淘宝客网站性质,单位网站备案,前端静态页面接单,昆山网站建设哪家比较好216.组合总和III 与77.组合差不多&#xff0c;就返回条件中收集结果步骤多了一步判断&#xff0c;同时剪枝策略多了一种 vector<vector<int>> ans; vector<int> path; int sum 0;void backtracking(int num, int& k, int& n) {if (path.size() k…

216.组合总和III

与77.组合差不多,就返回条件中收集结果步骤多了一步判断,同时剪枝策略多了一种

vector<vector<int>> ans;
vector<int> path;
int sum = 0;void backtracking(int num, int& k, int& n) {if (path.size() == k) {if (sum == n)ans.push_back(path);return;}// 剪枝1:同77.组合// 剪枝2:如果当前数已经大于n,那么该循环之后的数必定都大于n,执行剪枝for (int i = num; i <= 9 - (k - path.size()) + 1 && sum + i <= n; ++i) {sum += i;path.push_back(i);backtracking(i + 1, k, n);sum -= i;path.pop_back();}
}vector<vector<int>> combinationSum3(int k, int n) {backtracking(1, k, n);return ans;
}

17.电话号码的字母组合

本题与前两题组合的差别:

1、之前的组合是在一个集合中选取元素进行组合,本题是在多个集合中进行组合

2、本题中多了一步从数字映射到字母的操作

因为本题在多个集合中选取元素进行组合,不需要考虑剪枝操作。所以综上来看,理解了映射后其实本题比前两天组合还要简单。

回溯三部曲:

· 参数:

        map<int, vector<char>> dict:用于将数字映射到字符数组的哈希表

        vector<string>:存放最终结果的全局变量

        string path:存放当前路径下组合的字符串(相当于一个一维数组)

        int num:本次递归从digits[num]开始搜索

        string& digits:题意中的数字字符串

· 终止条件:组合中的元素个数等于digits中的元素个数,说明完成组合,将结果进行保存并返回

· 单层逻辑:

        获取当前数字的映射数组

        节点操作:当前组合(path)中添加当前值(letter[i])

        递归:获取digits中的下一个数字进行组合(递归参数传入num+1)

        回溯:letter[i]在该位置的所有组合已经全部收集完成,将letter[i]弹出当前组合

map<int, vector<char>> dict;
vector<string> ans;
string path;void backtracking(int num, string& digits) {if (path.size() == digits.size()) {ans.push_back(path);return;}vector<char> letters = dict[digits[num] - '0'];		// 将字符映射为数组 for (int i = 0; i < letters.size(); ++i) {path.push_back(letters[i]);backtracking(num + 1, digits);path.pop_back();}
}// 相比于之前的组合问题,就多了一步映射的操作
vector<string> letterCombinations(string digits) {dict.insert({ 2, {'a', 'b', 'c'} });dict.insert({ 3, {'d', 'e', 'f'} });dict.insert({ 4, {'g', 'h', 'i'} });dict.insert({ 5, {'j', 'k', 'l'} });dict.insert({ 6, {'m', 'n', 'o'} });dict.insert({ 7, {'p', 'q', 'r', 's'} });dict.insert({ 8, {'t', 'u', 'v'} });dict.insert({ 9, {'w', 'x', 'y', 'z'} });if (digits.empty())return {};backtracking(0, digits);return ans;
}

 自己还想了一种基于队列的解法:

vector<string> letterCombinations(string digits) {// 创建用于映射的哈希表map<int, vector<char>> dict;dict.insert({ 2, {'a', 'b', 'c'} });dict.insert({ 3, {'d', 'e', 'f'} });dict.insert({ 4, {'g', 'h', 'i'} });dict.insert({ 5, {'j', 'k', 'l'} });dict.insert({ 6, {'m', 'n', 'o'} });dict.insert({ 7, {'p', 'q', 'r', 's'} });dict.insert({ 8, {'t', 'u', 'v'} });dict.insert({ 9, {'w', 'x', 'y', 'z'} });vector<string> ans;// 保存组合过程的队列,初始有一个空字符串queue<string> path;path.push("");string temp;for (int i = 0; i < digits.size(); ++i) {// 获取数字对应的字符数组vector<char> letters = dict[digits[i] - '0'];// 将需要操作的元素取出队列,与字符数组中的字符逐个组合并压入队尾while (path.front().size() == i) {temp = path.front();path.pop();for (char c : letters) {path.push(temp + c);// 当前组合长度等于digits长度时收集结果if (i + 1 == digits.size())ans.push_back(temp + c);}}}return ans;
}
http://www.yayakq.cn/news/445260/

相关文章:

  • 网站开发范围说明书卷帘门怎么做网站
  • 泰州网页网站制作科技网站配色方案
  • 高端网站建设策划学室内设计去哪好
  • 响应式网站空间服务器要求晋江市建设局网站
  • 开发网站的流程步骤网页制作工作网站
  • 网站空间指的是什么意思wordpress 响应
  • 做网站搜索如何显示官网旅游网页设计图片素材
  • 大厂建设局网站wordpress文章字数
  • 网站优化qq群WordPress即时群聊
  • 学做网站论坛vip哈尔滨开网站
  • 旅游网站项目评估网站开发界面设计用什么工具
  • 建站系统搭建音乐网站188网站开发
  • 做深圳门户网站起什么名字好中国3大做外贸的网站
  • 网站怎么做快照利用表格布局做网站步骤
  • 美橙互联网站模板柳州网站建设工作室
  • 咸阳网站建设专业公司上海橙网站设计公司
  • 原阳网站建设建设网站公司价格
  • 最经典最常用的网站推广方式是石家庄官网
  • 战鼓网这种网站怎么做河南濮阳网站建设
  • 社区信息建设网站企业建设网站个人总结报告
  • 网站建设经验大总结全景网投资者互动平台
  • 做一个论坛网站多少钱有网站模板怎么建站
  • 建设网站微商城深圳市住房和建设局招标公告
  • 电商平面设计主要做什么重庆seo优化推广
  • 做图片网站 解决版权莱芜金点子电子版报纸
  • 做一年的网站能赚多少钱网站规划与站点的建立实训报告
  • 手机屏网站开发WordPress 类型 网页
  • 贵阳手机网站建设注册深圳公司新规定
  • 旅游景区网站建设规划incapsula wordpress
  • 网站建设的费用明细网站建设款计入什么科目