代码随想录day22 Java版

17.电话号码的字母组合

在套模板的基础上,手动按位置放一个映射表,每次独立处理字符,还要对空字符串单独处理(因为默认生成了StringBuilder是空字符串而不是null)

此处for循环并不像之前从start开始遍历,因为本题每一个数字代表的是不同集合,也就是求不同集合之间的组合,而求组合问题是求同一个集合中的组合

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

39. 组合总和

这种复杂算法可以先把给的数组排序方便剪枝

class Solution {List<List<Integer>> res = new ArrayList<>();List<Integer> path = new ArrayList<>();int sum = 0;public List<List<Integer>> combinationSum(int[] candidates, int target) {Arrays.sort(candidates);backtrack(candidates, target, 0);return res;}void backtrack(int[] candidates, int target, int start) {if (sum == target) {res.add(new ArrayList<>(path));  return;}          for (int i = start; i < candidates.length; i++) {if (sum + candidates[i] > target) break;path.add(candidates[i]);sum += candidates[i];backtrack(candidates, target, i);path.removeLast();sum -= candidates[i];}}
}

40.组合总和II

candidates有重复元素,但还不能有重复的组合真的离谱,加一个数组来标记

class Solution {List<List<Integer>> res = new ArrayList<>();List<Integer> path = new ArrayList<>();boolean[] used;int sum = 0;public List<List<Integer>> combinationSum(int[] candidates, int target) {used = new boolean[candidates.length];Arrays.fill(used, false);Arrays.sort(candidates);backtrack(candidates, target, 0);return res;}void backtrack(int[] candidates, int target, int start) {if (sum == target) res.add(new ArrayList<>(path));     for (int i = start; i < candidates.length; i++) {if (sum + candidates[i] > target) break;if (i > 0 && candidates[i] == candidates[i - 1] && !used[i - 1]) continue;used[i] = true;path.add(candidates[i]);sum += candidates[i];backtrack(candidates, target, i+1);used[i] = false;path.removeLast();sum -= candidates[i];}}
}

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

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

相关文章

c语言之嵌套语句

在if语句中包含多个if语句&#xff0c;就是嵌套语句。 嵌套语句的语法格式是 if (表达式1) if(表达式2) 语句1 else (表达式3) 语句2 else if(表达式4) 语句3 else 语句4 由于c语言不像python那样有缩进&#xff0c;无法通过缩进判断if else是否匹配 分辨方法是else总与最…

mysql表设计

表设计流程&#xff1a; &#xff08;1&#xff09;分库&#xff1a;根据模块分 &#xff08;2&#xff09;分表&#xff1a;根据流程分表 &#xff08;3&#xff09;冗余字段和视图设计 21个表设计准则 &#xff08;1&#xff09;命名规范 account_no,account_number 表名用t…

gorm day8

gorm day8 gorm Has Many关系gorm Many To Many关系 gorm Has Many关系 Has Many 在GORM&#xff08;Go的一个对象关系映射库&#xff09;中&#xff0c;“Has Many” 关系表示一个实体与另一个实体之间的一对多关系。这意味着一个实体&#xff08;我们称之为"父"…

【闲谈】开源软件的崛起与影响

随着信息技术的快速发展&#xff0c;开源软件已经成为软件开发的趋势&#xff0c;并产生了深远的影响。开源软件的低成本、可协作性和透明度等特点&#xff0c;使得越来越多的企业和个人选择使用开源软件&#xff0c;促进了软件行业的繁荣。然而&#xff0c;在使用开源软件的过…

软考 系统分析师系列知识点之信息系统战略规划方法(10)

接前一篇文章&#xff1a;软考 系统分析师系列知识点之信息系统战略规划方法&#xff08;9&#xff09; 所属章节&#xff1a; 第7章. 企业信息化战略与实施 第4节. 信息系统战略规划方法 7.4.6 战略栅格法 战略栅格&#xff08;Strategic Grid&#xff0c;SG&#xff09;法是…

基于CU,PO,RD,IPO矩阵图分析数据资产-自创

术语 数据资产&#xff1a;数据资产是具有价值的数据资源。没有价值的数据资源&#xff0c;通过采集&#xff0c;整理&#xff0c;汇总等加工后&#xff0c;也可以成为具有直接或间接价值的数据资产。传统企业逐渐数字化转型&#xff0c;尤其是互联网企业&#xff0c;都十分重视…

Linux标准IO库介绍

Linux 标准 I/O&#xff08;Standard I/O&#xff09;库提供了一组函数&#xff0c;用于进行高级别的文件输入和输出操作。它建立在底层文件 I/O 系统调用之上&#xff0c;为开发者提供了更方便、更高级别的文件处理方式。以下是一些常用的 Linux 标准 I/O 库函数&#xff1a; …

C#中implicit和explicit

理解: 使用等号代替构造函数调用的效果以类似重载操作符的形式定义用于类型转换的函数前者类型转换时候直接写等号赋值语法,后者要额外加目标类型的强制转换stirng str -> object o -> int a 可以 int a (int)(str as object)转换通过编译,但没有转换逻辑所以运行会报错…

小程序适配IOS底部小黑条

1、IOS底部小黑条高34px进行适配 <view class"container-px" style"padding-bottom: {{isIOS ? 68rpx : 0}};"><view class"container-wrap"></view> </view>2、使用css 兼容ios<11.2 padding-bottom: constant(s…

[NOIP2004]不高兴的津津 -- --- 牛客网

题目描述 津津上初中了。妈妈认为津津应该更加用功学习&#xff0c;所以津津除了上学之外&#xff0c;还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴&#xff0c;而且上得越久就会越不高兴。假设…

【LeetCode】455. 分发饼干(简单)——代码随想录算法训练营Day31

题目链接&#xff1a;455. 分发饼干 题目描述 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1…

C语言=和==如何区分?

一、问题 这两个符号&#xff0c;在不严格的情况下&#xff0c;都可以读成“等于”&#xff0c;但是两个“等于”在程序中有完全不同的⽤法。错误使⽤将导致程序⽆法得出正确的结果&#xff0c;⽽且有时没有错误提⽰。 那么&#xff0c;怎样正确区分这两个运算符呢&#xff1f…

《区块链公链数据分析简易速速上手小册》第3章:区块链数据结构(2024 最新版)

文章目录 3.1 区块和交易的结构3.1.1 基础知识3.1.2 重点案例&#xff1a;构建简单的区块链3.1.3 拓展案例 1&#xff1a;验证交易签名生成密钥对签名交易验证签名完整的交易签名与验证演示 3.1.4 拓展案例 2&#xff1a;监听和解析区块链事件代币合约示例&#xff08;Solidity…

Android adb使用超级大全

Android adb使用超级大全 ADB&#xff0c;即Android Debug Bridge&#xff0c;是一款强大的工具&#xff0c;对于Android开发/测试人员来说是不可或缺的&#xff0c;同时也是Android设备玩家的好玩具。本文将详细介绍ADB的使用方法。 ADB的基本用法如下&#xff1a; 命令语法…

Pb协议的接口测试

Protocol Buffers 是谷歌开源的序列化与反序列化框架。它与语言无关、平台无关、具有可扩展的机制。用于序列化结构化数据&#xff0c;此工具对标 XML &#xff0c;支持自动编码&#xff0c;解码。比 XML 性能好&#xff0c;且数据易于解析。更多有关工具的介绍可参考官网。 P…

Django form组件 - 神奇的后端直接渲染HTML

前言 之前在HTML页面中利用form表单向后端提交数据时会写一些获取用户输入的标签并且使用form标签将其包裹起来。并且很多场景下都需要对用户的输入做校验&#xff0c;比如用户输入的长度和格式等&#xff0c;如果用户输入的有误就需要在页面上相应的位置显示相应的错误信息。…

JavaScript学习之旅8------深入理解JavaScript:作用域与词法环境解析

目录 写在开头1. JavaScript作用域简介1.1. 定义作用域1.2. 作用域链1.3. 全局作用域1.4. 局部作用域1.5. 块级作用域1.6. 作用域和变量生命周期 2. 词法环境与闭包2.1. 词法环境2.2. 闭包2.3. 闭包的工作原理2.4. 闭包的应用实例2.5. 闭包的注意事项 3. 作用域与变量提升3.1. …

NOIP2003.加分二叉树

题目链接 题目描述 设一个n个节点的二叉树tree的中序遍历为&#xff08;l,2,3,…,n&#xff09;&#xff0c;其中数字1,2,3,…,n为节点编号。每个节点都有一个分数&#xff08;均为正整数&#xff09;&#xff0c;记第j个节点的分数为di&#xff0c;tree及它的每个子树都有一个…

RBF神经网络中的RBF的英文全称是什么,是用来干什么的?

问题描述&#xff1a;RBF神经网络中的RBF的英文全称是什么&#xff0c;是用来干什么的&#xff1f; 问题解答&#xff1a; RBF神经网络中的RBF是径向基函数&#xff08;Radial Basis Function&#xff09;的缩写。径向基函数是一种在机器学习和模式识别中常用的函数类型&…

数据库从入门到精通(一)数据库基础操作

mysql数据库基础操作 cmd下启动mysql数据库操作命令数据库重要的删除操作数据库增删改查操作插入数据更新数据删除数据查询数据查询指定记录in查询满足指定范围之内的条件记录not in查询不在指定范围之内的条件记录带between and 的范围查询带like的字符匹配查询(d%以d开头,%d以…