Day19 | 77. 组合 216.组合总和III 17.电话号码的字母组合

news2024/9/20 1:15:14

语言

Java

77. 组合

组合

题目

给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。

你可以按 任何顺序 返回答案。

思路

回溯算法,其实也是递归的思想加上回溯

递归的终止条件:集合大小等于k了

递归参数:n, k , startIndex

单层递归加回溯:

用for循环减少满足的位置,用递归进行添加到数组中,再进行回溯。

代码

未剪枝的

class Solution {
    List<List<Integer>> result = new ArrayList<>();
    LinkedList<Integer> path = new LinkedList<>(); 
    public List<List<Integer>> combine(int n, int k) {
        backtracking(n, k, 1);
            return result;
    
    }
    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++) {
            path.add(i);
            backtracking(n, k, i + 1);
            path.removeLast();
        }
    }
}

剪枝后

class Solution {
    List<List<Integer>> result = new ArrayList<>();
    LinkedList<Integer> path = new LinkedList<>(); 
    public List<List<Integer>> combine(int n, int k) {
        backtracking(n, k, 1);
            return result;
    
    }
    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 - (k - path.size()) + 1; i++) {
            path.add(i);
            backtracking(n, k, i + 1);
            path.removeLast();
        }
    }
}

易错点

定义的是可变数组,剪枝操作那里要记住索引+1。

216.组合总和III

组合总和III

题目

找出所有相加之和为 n 的 k 个数的组合,且满足下列条件:

  • 只使用数字1到9
  • 每个数字 最多使用一次 

返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。

思路

回溯题目,本文依然采取递归加回溯的方法,并且进行剪枝。

递归参数:n ,k ,sum,startIndex

递归终止条件:如果数组大小为k,和等于n

单层递归:循环1-9中在添加到path中sum进行累加

进行递归只有参数startIndex改为i + 1

再进行回溯。

代码

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

易错点

重难点在于剪枝,第一个剪枝是判断sum>n直接返回

第二个是在for循环中 如果没有满足的位置 直接进行下一次循环

17.电话号码的字母组合

电话号码的字母组合

题目

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

思路

本题依然采取递归的方法完成,创建一个数组接收结果。

递归参数:题目给的字符串,创建的数字对应的字母,遍历字符串时用的索引。

递归终止条件:将字符串遍历完,将结果添加到数组中。

单层递归:for循环加上内层递归。

具体细节看代码

代码

class Solution {
    List<String> list = new ArrayList<>();
    public List<String> letterCombinations(String digits) {
        if (digits == null || digits.length() == 0) {
            return list;
        }
        String[] numString = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
        backTracking(digits, numString, 0);
        return list; 
    }
    StringBuilder temp = new StringBuilder();
    public void backTracking(String digits,String[] numString, int index) {
        if (index == digits.length()) {
            list.add(temp.toString());
            return;
        }
        String str = numString[digits.charAt(index) - '0'];
        for (int i = 0; i < str.length(); i++) {
            temp.append(str.charAt(i));
            backTracking(digits, numString, index + 1);
            temp.deleteCharAt(temp.length() - 1);
        }
    }
}

易错点

递归终止条件是索引等于字符串的长度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1945740.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网闸(Network Gatekeeper或Security Gateway)

本心、输入输出、结果 文章目录 网闸(Network Gatekeeper或Security Gateway)前言网闸主要功能网闸工作原理网闸使用场景网闸网闸(Network Gatekeeper或Security Gateway) 编辑 | 简简单单 Online zuozuo 地址 | https://blog.csdn.net/qq_15071263 如果觉得本文对你有帮助…

如何开户投放必应Bing国内搜索广告?

有效的互联网营销渠道是企业提升品牌知名度和促进业务增长的关键&#xff0c;必应Bing作为微软旗下的全球领先搜索引擎之一&#xff0c;其国内搜索广告平台为企业提供了一个高效、精准的营销渠道。云衔科技作为微软必应Bing的官方代理商&#xff0c;为企业提供了专业的一站式开…

外六角半螺纹螺丝主要应用领域

外六角半螺纹螺丝&#xff0c;作为一种常见的紧固件&#xff0c;因其独特的设计和多样的功能而在多个工业领域中占据着重要的地位。这种螺丝的一端具有完整的螺纹&#xff0c;而另一端则可能没有螺纹或螺纹较短&#xff0c;这样的设计使其在某些应用场景中具有独特的优势。 应用…

git配置BeyondCompare解决冲突(全网最细讲解,亲测有用,windows版本)

前言&#xff1a; 网上查阅了很多资料&#xff0c;大都讲的不是很全面&#xff0c;很多还配置不成功&#xff0c;特写此篇博客来详细全面的讲解配置步骤&#xff08;亲测可用&#xff09;。本篇文章具有局限性&#xff0c;欢迎大家相互交流&#xff0c;批评指正。 特此说明&am…

【快速实践 OpenCV morphology】形态学操作:腐蚀、膨胀、开运算、闭运算

✨我们将以下图为例&#xff0c;快速实践不同的形态学操作&#xff0c;如腐蚀 erode、膨胀 dilate、开 open、闭 close … import cv2 import numpy as npimg cv2.imread(D:\Desktop\csdn.png,0) cv2.imshow(binary_Erode2, img) cv2.waitKey(0)&#x1f49c; 腐蚀 &#xff…

Pytest进阶之fixture的使用(超详细)

目录 Fixture定义 Fixture使用方式 作为参数使用 Fixture间相互调用(作为参数调用) 作为conftest.py文件传入 Fixture作用范围Scope function class module session Fixture中params和ids Fixture中autouse Fixture中Name 总结 pytest fixture 是一种用来管理测试…

VMare centos 7 设置固定ip

第一步获取网关 查看虚拟机的网关-》编辑-》虚拟网络编辑器 NAT模式-》NAT设置 获取网关IP 192.168.70.2 第二步获取主机dns1 在本地主机获取dns1&#xff0c;本地主机调出cmd输入ipconfig dns1为192.168.31.1 用管理员权限的账号进入需要设置固定ip的虚拟机&#xff0c;在t…

天猫超市卡有什么用处?

现在买东西不是都有优惠券叠加啥的&#xff0c;完了可以优惠不少钱 前两天我刚在天猫买了点东西&#xff0c;天猫送了我一张猫超卡&#xff0c;刚好手上的积分也兑换了一张100的&#xff0c;这样就有2张卡了 但是把想买的东西加购以后&#xff0c;感觉还不如京东便宜&#xf…

圣贝拉IPO:高榕资本等减持,多次被罚,间接子公司资金链断裂

近日&#xff0c;中国证监会披露《境外发行上市备案补充材料要求&#xff08;2024年7月12日—2024年7月18日&#xff09;》。信息显示&#xff0c;证监会国际司共对3家企业出具补充材料要求&#xff0c;涉及绿茶餐厅&#xff08;绿茶集团&#xff09;、广州星梦&#xff08;星梦…

html+css 动态效果

1.波浪效果 <div class"sitesingle"></div> <style>.sitesingle{display:flex;justify-content:space-between;align-items:stretch;overflow:hidden;position:relative;height: 400px;}keyframes bgRotate{0%{transform:rotate(0deg)}to{transfor…

bool数组的理解和应用[C++]

文章目录 bool数组的用法bool数组的定义声明bool数组的初始化访问和修改数组元素遍历数组 运用bool数组简单代码 在今天做题中发现了bool类不仅能用于函数类型还能用于数组类型&#xff0c;好奇查了查发现bool还有很多用处&#xff1a;基本变量&#xff0c;在枚举类型中会用到&…

好用的图片压缩工具有哪些?我只推荐这13款!赶紧码住!

图片压缩如何实现&#xff1f;电脑上经常会存储很多图片文件&#xff0c;随着图片文件不断的增加&#xff0c;存储空间就面临一大难题。不管是存储还是传输&#xff0c;将图片压缩到一定体积&#xff0c;都是一个不错的选择。 而且图片压缩技术能够在保持图片质量的同时&#x…

【Vue实战教程】之 Vue3 新特性详解

1 为什么要用Vue3 在学习Vue3的新特性之前&#xff0c;我们先来看一下Vue3设计的目的是什么&#xff0c;为什么要对Vue2做出很大的改变&#xff0c;以及Vue3到底解决了什么问题。像Vue这样全球闻名的前端框架&#xff0c;在任何一次改动时&#xff0c;设计者都是经过深思熟虑的…

【openavis】明厨亮灶算法仓

明厨亮灶算法仓主要用于学校食堂&#xff0c;餐厅等饮食卫生安全监管场景&#xff0c;目前包含的算法如下&#xff1a; 算法类型 算法卡片 明厨亮灶算法仓 老鼠检测 垃圾桶未盖 厨师服检测 厨师帽检测 口罩检测 手套检测 动火离人 1. 算法规格介绍&#xff1a; 算…

微软CrowdStrike驱动蓝屏以及内核签名

原因 当Windows操作系统遇到严重错误导致系统崩溃时&#xff0c;屏幕显示为蓝色&#xff0c;通常伴有错误代码和信息&#xff0c;这被称为“蓝屏死机”&#xff08;Blue Screen of Death&#xff0c;简称BSOD&#xff09; https://www.thepaper.cn/newsDetail_forward_281262…

2024最新Uniapp的H5网页版添加谷歌授权验证

现在教程不少,但是自从谷歌升级验证之后,以前的老教程就失效了,现在写一个新教程以备不时之需。 由于众所周知的特殊原因,开发的时候一定注意网络环境,如果没有梯子是无法进行开发的哦~ clientID的申请方式我就不再进行赘述了,其他的教程上面都有,我这边只提供最重要的…

vue 实战 区域内小组件元素拖拽 示例

<template><div><el-button type"primary" click"showDialog true">快捷布局</el-button><el-dialog title"快捷布局配置" :visible.sync"showDialog"><el-row :gutter"20"><el-co…

超级兔子数据恢复的 9 大替代方案

对于任何计算机或智能手机用户来说&#xff0c;数据丢失都是最大的问题之一&#xff0c;因为它可能会造成严重的创伤&#xff0c;有时甚至会造成瘫痪。丢失所有重要文件、照片、视频和所有工作可能是一种可怕的经历。可悲的是&#xff0c;它发生的频率比我们想象的要多。这就是…

DNS应用以及扩展知识

&#xff08;一&#xff09;DNS正向代理 1.首先在DNS服务器上安装bind包&#xff0c;安装环境 此部分参考上一个笔记 2.修改配置文件 vim /etc/named.conf 在配置文件中加上"any;" 3.然后配置/etc/named.rfc1912.zonesw文件 添加选中部分 选中部分有一个file文…

Python番外篇:变量是盒子还是标签

引言 前面通过几十篇文章&#xff0c;大概把Python的一些比较实用的基础做了一些介绍&#xff0c;学会这些&#xff0c;基本能应付日常的小的需求开发了&#xff0c;写一些小工具&#xff0c;提高工作的处理效率。 接下来&#xff0c;准备开始进入一个新的篇章&#xff0c;也…