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

代码随想录算法训练营第22天 | 组合 组合总和 电话号码的字母组合

77. 组合

77. 组合 - 力扣(LeetCode)

class Solution {
    List<Integer> path = new ArrayList<>();
    List<List<Integer>> result = new ArrayList<>();
    public void backTracking(int n,int k,int startIndex){
        if(path.size() == k){
            result.add(new ArrayList(path));
            return;
        }
        for(int i = startIndex;i <= n;i++){//剪枝:i <= n - (k - path.size()) + 1
            path.add(i);
            backTracking(n,k,i+1);
            path.remove(path.size()-1);
        }
    }
    public List<List<Integer>> combine(int n, int k) {
        backTracking(n,k,1);
        return result;
    }
}

题目链接/文章讲解:代码随想录

视频讲解:带你学透回溯算法-组合问题(对应力扣题目:77.组合)| 回溯法精讲!_哔哩哔哩_bilibili

剪枝操作:带你学透回溯算法-组合问题的剪枝操作(对应力扣题目:77.组合)| 回溯法精讲!_哔哩哔哩_bilibili

216.组合总和III

题目链接/文章讲解:代码随想录

视频讲解:和组合问题有啥区别?回溯算法如何剪枝?| LeetCode:216.组合总和III_哔哩哔哩_bilibili

class Solution {
    int sum = 0;
    List<Integer> path = new ArrayList<>();
    List<List<Integer>> result = new ArrayList<>();
    public void backTracking(int k ,int n,int startIndex){
        if(path.size() == k){
            if(sum == n)result.add(new ArrayList(path));
            return;
        }
        for(int i = startIndex;i <= 9 - (k - path.size())+1;i++){
            path.add(i);
            sum += i;
            backTracking(k,n,i+1);
            path.remove(path.size()-1);
            sum -= i;
        }
    }
    public List<List<Integer>> combinationSum3(int k, int n) {
        backTracking(k,n,1);
        return result;
    }
}

17.电话号码的字母组合

题目链接/文章讲解:代码随想录

视频讲解:还得用回溯算法!| LeetCode:17.电话号码的字母组合_哔哩哔哩_bilibili

class Solution {
    StringBuilder path = new StringBuilder();
    List<String> res = new ArrayList<>();
    public void backTracking(String digits,String[] numString,int index){
        if(index == digits.length()){
            res.add(path.toString());
            return;
        }
        String str = numString[digits.charAt(index) - '0'];//找到数字映射的字母
        for(int i = 0;i < str.length();i++){
            path.append(str.charAt(i));//遍历各个字母
            backTracking(digits,numString,index + 1);//对下个数字进行相同的步骤
            path.deleteCharAt(path.length()-1);//回溯
        }
    }

    public List<String> letterCombinations(String digits) {
       if(digits == null || digits.length() == 0)return res;
       String[] numString = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};//数字和字母的关系
       backTracking(digits,numString,0);
       return res;
    }
}

相关文章:

  • react中NavLink和a标签区别
  • 最新的前端场景面试题
  • wxWidgets GUI 跨平台 入门学习笔记
  • gmm_08.pkl 解析 读取
  • wordpress分类名称调用的几种情况
  • Manus邀请码获取方法 + 使用指南(直接领取pdf)
  • TOB企业发展前期,在获客方面容易碰到哪些问题?
  • MyBatis 配置文件核心
  • c++实现在同一台主机两个程序实现实时通信
  • 阿里推出全新推理模型(因果语言模型),仅1/20参数媲美DeepSeek R1
  • ABB 继电器和晶体管输出端子使用
  • 双指针算法
  • 介绍一个能支持高带宽的EDID编辑软件
  • SpringCloud系列教程(十三):Sentinel流量控制
  • python脚本py文件加密 pyarmor
  • Linux - 文件
  • 算法之 前缀和
  • 力扣132. 分割回文串 II
  • 传统工厂转型实录:1套WMS系统如何砍掉40%仓储成本
  • 信奥赛CSP-J复赛集训(DP专题)(16):P1203 [USACO1.1] 坏掉的项链 Broken Necklace
  • iis做网站上传速度慢/网站搜索工具
  • 平面设计素材网站排名/深圳营销推广引流公司
  • 动态网站开发 PHP/杭州网站建设方案优化
  • 空间坐标系做图网站/域名权重是什么意思
  • 青岛专业公司网站设计公司/网站设计与制作
  • 网站开发的项目总结/百度seo外链推广教程