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

代码随想录训练营Day25:● 216.组合总和III ● 17.电话号码的字母组合

216.组合总和III

题目链接

https://leetcode.cn/problems/combination-sum-iii/description/

题目描述

在这里插入图片描述

思路

自己写的效率会慢一些,而且没有用到剪枝

class Solution {List<List<Integer>> list = new ArrayList<>();List<Integer> list1 = new ArrayList<>();public List<List<Integer>> combinationSum3(int k, int n) {trackback(k,n,1);return list;}public void trackback(int k,int n,int startindex){if(list1.size()==k){int sum=0;for (Integer integer : list1) {sum+=integer;}if(sum==n){list.add(new ArrayList<>(list1));return;}}for (int i = startindex; i <= 9; i++) {list1.add(i);trackback(k,n,i+1);list1.remove(list1.size()-1);}}
}

参考答案
在这里插入图片描述

class Solution {List<List<Integer>> result = new ArrayList<>();LinkedList<Integer> path = new LinkedList<>();public List<List<Integer>> combinationSum3(int k, int n) {backTracking(n, k, 1, 0);return result;}private void backTracking(int targetSum, int k, int startIndex, int sum) {// 减枝if (sum > targetSum) {return;}if (path.size() == k) {if (sum == targetSum) result.add(new ArrayList<>(path));return;}// 减枝 9 - (k - path.size()) + 1for (int i = startIndex; i <= 9 - (k - path.size()) + 1; i++) {path.add(i);sum += i;backTracking(targetSum, k, i + 1, sum);//回溯path.removeLast();//回溯sum -= i;}}
}

17.电话号码的字母组合

题目链接

https://leetcode.cn/problems/letter-combinations-of-a-phone-number/description/

题目描述

在这里插入图片描述

思路

class Solution {StringBuilder stringBuilder = new StringBuilder();List<String> list = new ArrayList<>();public List<String> letterCombinations(String digits) {if(digits == null || digits.length()==0){return list;}String[] nums = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};backTraing(digits,0,nums);return list;}public void backTraing(String digits,int index,String[] nums){//如果字符串是 “23”//当index等于2的时候,也就是已经遍历完了2 和 3,终止if(index==digits.length()){list.add(stringBuilder.toString());return;}//获取 2int digit = digits.charAt(index) - '0';//找到 2 对应的 "abc"String letter = nums[digit];for (int i = 0; i < letter.length(); i++) {//遍历 abc 添加到结果集中stringBuilder.append(letter.charAt(i));//回溯,将index 加 1 就会遍历 3 的 "def"backTraing(digits,index+1,nums);将添加的删掉stringBuilder.deleteCharAt(stringBuilder.length()-1);}}
}
http://www.lryc.cn/news/319133.html

相关文章:

  • SwiftUI的 特性 - ViewModify
  • 中间件 | RPC - [Dubbo]
  • 【中等】保研/考研408机试-二叉树相关
  • 自动驾驶---Motion Planning之构建SLT Driving Corridor
  • 本地文件包含漏洞利用
  • 【docker】docker的常用命令
  • jmeter实战
  • 面试官常问问题
  • 外包就干了2个月,技术退步明显....
  • 面向对象 汇总(详细内容见Day12—16)
  • 结构体联合体枚举和位段
  • 人类程序员真要失业?首位“AI软件工程师”亮相引爆科技圈
  • redis的过期策略以及内存淘汰机制
  • 华为数通方向HCIP-DataCom H12-821题库(多选题:161-180)
  • 网络通信与网络协议
  • 【矩阵】240. 搜索二维矩阵 II【中等】
  • 详解uniapp的生命周期
  • 鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:PluginComponent)
  • mysql笔记:15. 事务和锁
  • Learn OpenGL 15 面剔除
  • EndeavourOs(arch系)安装sunpinyin输入法(ibus) + 迅雷(xunlei-bin)
  • Spring Cache框架的介绍和使用
  • perl 用 XML::Parser 解析 XML文件,访问哈希
  • MATLAB中的矩阵和数组,它们之间有什么区别?
  • python爬虫实战——抖音
  • Day1-力扣刷题学习打卡
  • C语言的位操作与位字段
  • 应用实战|从头开始开发记账本1:如何获取BaaS服务
  • el-form v-for循环列表的表单如何校验
  • 笔记:《NCT全国青少年编程能力等级测试教程Python语言编程三级》