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

算法练习第二十五天| 216.组合总和III、17.电话号码的字母组合

leetcode题目链接
17
216

216.组合总和III

class Solution {
    List<Integer> path = new ArrayList();
    List<List<Integer>> result = new ArrayList();
    public List<List<Integer>> combinationSum3(int k, int n) {
        backTrace(k,n,1,0);
        return  result;
    }
    public void backTrace(int k,int n,int startIndex,int sum){

        //结束条件
        if(path.size() == k){
            if(sum == n) result.add(new ArrayList(path));
            return;
        }

        for(int i = startIndex;i<=9-(k-path.size())+1;i++){
            sum += i;
            path.add(i);
            if (sum > n) { // 剪枝操作
                sum -= i; // 剪枝之前先把回溯做了
                path.removeLast(); // 剪枝之前先把回溯做了
                return;
            }
            backTrace(k,n,i+1,sum);
            sum -=i;
            path.removeLast();
        }
    }
}

17.电话号码的字母组合

class Solution {
    List<String> result = new ArrayList();
    static Map<Integer,String> map = new HashMap();
    StringBuilder tmp = new StringBuilder();
    static {
        map.put(2,"abc");
        map.put(3,"def");
        map.put(4,"ghi");
        map.put(5,"jkl");
        map.put(6,"mno");
        map.put(7,"pqrs");
        map.put(8,"tuv");
        map.put(9,"wxyz");
    }
    public List<String> letterCombinations(String digits) {
        if (digits == null || digits.length() == 0) {
            return result;
        }
        backTrace(digits,0);
        return result;
    }

    /**
        params:index遍历到第几个数字
     */
    public void backTrace(String digits,int index){
        //终止条件
        //这里为什么不是index==digits.length()-1???
        //需要理解遍历到这个最后的字符,和遍历完最后这个字符的区别
        if(index == digits.length()){
            result.add(tmp.toString());
            return;
        }
        int digit = digits.charAt(index) - '0';
        String s= map.get(digit);
        for(int i = 0;i<s.length();i++){
            tmp.append(s.charAt(i));
            backTrace(digits,index+1);
            tmp.deleteCharAt(tmp.length()-1);
        }

    }
}

http://www.kler.cn/a/273443.html

相关文章:

  • c语言 变量类型总结
  • OpenAI 提示工程指南详解
  • 哔哩哔哩车机版2.7.0|专为司机打造的车机版B站,内容丰富,功能齐全
  • [实战-11] FlinkSql 设置时区对TIMESTAMP和TIMESTAMP_LTZ的影响
  • MySQL超大分页怎么优化处理?limit 1000000,10 和 limit 10区别?覆盖索引、面试题
  • 03:选择语句的练习
  • 云手机的数据安全有保障吗?
  • 信息系统项目管理师019:存储和数据库(2信息技术发展—2.1信息技术及其发展—2.1.3存储和数据库)
  • 语音识别:whisper部署服务器(远程访问,语音实时识别文字)
  • ElasticSearch文档操作[ES系列] - 第502篇
  • MyBatisPlus最实用教程
  • Tomcat(二)
  • 机器学习_聚类(k-means)
  • Bash Shell中双引号中的感叹号问题详解
  • 基于Spring Boot的社区垃圾分类管理平台的设计与实现
  • RediSearch比Es搜索还快的搜索引擎
  • Java实现定时发送邮件(基于Springboot工程)
  • 【NLP9-Transformer经典案例】
  • 放慢音频速度的三个方法 享受慢音乐
  • 【数据挖掘】实验3:常用的数据管理
  • 【Docker】常用命令 docker build
  • 还原wps纯粹的编辑功能
  • VSCode下使用github初步
  • java的成员变量和局部变量
  • 前端面试拼图-实践经验
  • 基础:TCP三次握手做了什么,为什么要握手?