五金模具技术支持 东莞网站建设/百度长尾关键词挖掘工具
目录
一,电话号码的字母组合
1.题意
2.例子
3.题目接口
4.解题代码和思路
代码:
思路:
二,括号的生成
1.题意
2.例子
3.题目接口
四,解题代码和思路
1.先写代码:
2.思路
三,组合
1.题意
2.例子
3.题目接口
4.解题代码
一,电话号码的字母组合
1.题意
给定一个仅包含数字
2-9
的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
2.例子
比如以上例子,2对应的字母组合是"abc",3对应的字母组合是"def"。所以,这里便有两组字母组合,这两组字母组合的互相的两两搭配便是我们要找的答案。
3.题目接口
class Solution {
public:vector<string> letterCombinations(string digits) {}
};
4.解题代码和思路
代码:
class Solution {string arr[10] = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};//字母映射vector<string>ret;//存结果的数组string path;//整合结果public:vector<string> letterCombinations(string digits) {if(digits.size()==0){return ret;}dfs(digits,0);return ret;}void dfs(string& digits,int pos){if(path.size()==digits.size())//当path的长度和digits的长度相等的时候便可以加入到结果中{ret.push_back(path);return;}string ch = arr[digits[pos]-'0'];for(int i = 0;i<ch.size();i++){path.push_back(ch[i]);dfs(digits,pos+1);//深度优先遍历,通过下标来控制遍历的起始位置path.pop_back();}}
};
思路:
要解决这道题,首先便要搞一个能够映射的数组arr。这个数组一共有十位,前两位是空的。后八位便以电话键的数字为下标,字母为内容一一映射:
string arr[10] = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
然后便是两个全局变量的设计,全局变量的使用只是为了能够让函数传参更加方便罢了。
在这里最重要的还是dfs函数的设计。
1.首先是函数头:
因为两个全局变量的设计,让我们的dfs函数的传参变得比较简单,只需要传入两个参数,一个是digits,另一个是下标pos:
void dfs(string& digits,int pos)
2.递归的结束条件:
递归的结束条件就是上面的例子中所说的那样,当整合结果的path的长度等于digits的长度时便可以将结果留到ret里。然后再返回到上一层。
if(path.size()==digits.size()){ret.push_back(path);return;}
3.函数体的设计
要想设计好函数体,首先便要知道这个函数应该如何运行才能得到我们想要的结果。以digits==“23”为例。2:abc,3:def。结果为:["ad","ae","af","bd","be","bf","cd","ce","cf"]
画出决策树:
从这个树形结构可以看出,在每一层要处理的节点的个数就是每一个string的个数。比如“abc”有三个字母组成,在这里便要处理3个节点。下一层的“def”也是。所以,处理每一层便可以使用for循环。于是得到下面的代码:
string ch = arr[digits[pos]-'0'];//得到每一层的stringfor(int i = 0;i<ch.size();i++)//层遍历{path.push_back(ch[i]);dfs(digits,pos+1);//深度优先遍历,通过下标来控制下一层得到的是下一个string成员path.pop_back();}
层遍历加上深度优先遍历便构成这段代码的函数体。
二,括号的生成
1.题意
数字
n
代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
2.例子
以n=3为例子,那这个函数便要找出三个左括号:"("与三个右括号:")"的所有搭配。如上图所示。
3.题目接口
class Solution {
public:vector<string> generateParenthesis(int n) {}
};
四,解题代码和思路
1.先写代码:
class Solution {vector<string>ret;//存放最后的结果string path;//记录每一个得到的结果int right = 0;//记录有右括号的个数int left = 0;//记录左括号的个数
public:vector<string> generateParenthesis(int n) {dfs(n);return ret;}void dfs(int& n){if(path.size()==2*n){ret.push_back(path);return;}if(left<n){path.push_back('(');left++;dfs(n);path.pop_back();left--;}if(right<left){path.push_back(')');right++;dfs(n);path.pop_back();right--;}}};
2.思路
先来讲一讲这道题的关键问题:括号的有效性。先以n==3为例子,这个时候左括号和右括号在什么时候插入到path中才是合法的呢?这就要从左右括号的插入顺序和数量来讨论了。
1.首先得是顺序:第一个插入的括号必须为左括号。这个该如何控制呢?实现这个逻辑的代码如下:
if(right<left){path.push_back(')');right++;dfs(n);path.pop_back();right--;}
只有在右括号的数量小于左括号时才能插入右括号,这也就保证了path第一个插入的括号是(。
2.括号的数量,因为右括号的数量在递归的过程中是一直小于或者等于left的。所以控制了左括号的数量小于n便是控制了有括号的数量小于n。所以代码如下:
if(left<n)//控制左括号数量{path.push_back('(');left++;dfs(n);path.pop_back();left--;}
当n==2时,决策树:
三,组合
1.题意
给定两个整数
n
和k
,返回范围[1, n]
中所有可能的k
个数的组合。你可以按 任何顺序 返回答案。
2.例子
这道题对我们的要求便是要求出在1~n之间按k个数的组合。并且一个组合和另一个组合的数字不同才能叫做不同的组合。顺序不同不能叫做组合。
3.题目接口
class Solution {
public:vector<vector<int>> combine(int n, int k) {}
};
4.解题代码
class Solution {
public:
vector<vector<int>>ret;
vector<int>path;vector<vector<int>> combine(int n, int k) {dfs(n,k,1);return ret;}void dfs(int& n,int& k,const int& pos)//用引用要加const,不加就是权限的放大。{if(path.size()==k){ret.push_back(path);return;}for(int i = pos;i<=n;i++)//用下标来控制剪枝{path.push_back(i);dfs(n,k,i+1);path.pop_back();}}
};
相关文章:

递归算法学习——电话号码的字母组成,括号生成,组合
目录 一,电话号码的字母组合 1.题意 2.例子 3.题目接口 4.解题代码和思路 代码: 思路: 二,括号的生成 1.题意 2.例子 3.题目接口 四,解题代码和思路 1.先写代码: 2.思路 三,组合 …...

记录 JSONObject.parseObject json对象转换 对象字段为null
1.业务背景 使用websocket 接收消息都是String类型,没办法自定义实体类接收,所以接发都必须将json 转 对象 对象转 json。 这是我最开始的实体类,也就是转换的类型 package com.trinity.system.domain;import lombok.AllArgsConstructor; im…...

Android Native Code开发学习(二)JNI互相传参返回调用
Android Native Code开发学习(二) 本教程为native code学习笔记,希望能够帮到有需要的人 我的电脑系统为ubuntu 22.04,当然windows也是可以的,区别不大 一、native code介绍 native code就是在android项目中混合C或…...

Ubuntu 下安装Qt5.12.12无法输入中文解决方法
Ubuntu 下安装Qt5.12.12无法输入中文解决方法 一,环境: (1)VMware Workstation 15 Pro (2)Ubuntu 20.04 (3)Qt 5.12.12 64bits (4)Qt Creator 5.0.2 &#…...

微信小程序左上角home图标的解决方法之一 层级混乱导致的home图标显示的问题 自定义左上角左侧图标的返回路径
这个项目的编辑页在tabbar上 导致跳到tabbar得使用wx.switchTab 保存后返回原来的页面就出现了左上角的home图标 本来想通过自定义home图标的跳转路径来解决这个问题 没想到居然找不到相关内容 有清楚的朋友麻烦给我留个言不胜感激 那我写一下我的骚操作 app.js globalData: {…...

Kubernetes(K8s 1.28.x)部署---超详细
目录 一、基础环境配置(所有主机均要配置) 1、配置IP地址和主机名、hosts解析 2、关闭防火墙、禁用SELinux 3、安装常用软件 4、配置时间同步 5、禁用Swap分区 6、修改linux的内核参数 7、配置ipvs功能 二、容器环境操作 1、定制软件源 2、安…...

spring高级源码50讲-20-36(springMVC)
文章目录 WEB20) RequestMappingHandlerMapping 与 RequestMappingHandlerAdapter演示1 - DispatcherServlet 初始化代码参考 收获💡演示2 - 自定义参数与返回值处理器代码参考 收获💡 21) 参数解析器演示 - 常见参数解析器代码参考 收获💡 2…...

Leetcode Top 100 Liked Questions(序号141~189)
141. Linked List Cycle 题意:给你一个链表,判断链表有没有环 我的思路 两个指针,一个每次走两步,一个每次走一步,如果走两步的那个走到了NULL,那说明没有环,如果两个指针指向相等&…...

网络编程day3-FTP客户端项目
FTP协议 FTP 的独特的优势同时也是与其它客户服务器程序最大的不同点就在于它在两台通信的主机之间使用了两条 TCP 连接,一条是数据连接,用于数据传送;另一条是控制连接,用于传送控制信息(命令和响应)&…...

音频母带制作::AAMS V4.0 Crack
自动音频母带制作简介。 使用 AAMS V4 让您的音乐听起来很美妙! 作为从事音乐工作的音乐家,您在向公众发布材料时需要尽可能最好的声音,而为所有音频扬声器系统提供良好的商业声音是一项困难且耗时的任务。AI掌握的力量! 掌控您…...

【SpringCloud】SpringCloud整合openFeign
文章目录 前言1. 问题分析2. 了解Feign3. 项目整合Feign3.1 引入依赖3.2 添加注解3.3 编写Feign客户端3.4 测试3.5 总结 4. 自定义配置4.1 配置文件方式4.2 Java代码方式 5. Feign使用优化5.1 引入依赖5.2 配置连接池 6. Feign最佳实践6.1 继承方式6.2 抽取方式 前言 微服务远…...

成集云 | 飞书审批同步金蝶云星空 | 解决方案
源系统成集云目标系统 方案介绍 飞书员工报销审批通过后,审批单据内容和审批状态实时同步金蝶云星空 飞书是字节跳动于2016年自研的新一代一站式协作平台,将即时沟通、日历、云文档、云盘和工作台深度整合,通过开放兼容的平台,…...

【计算机组成 课程笔记】3.2 算数运算和逻辑运算的硬件实现
课程链接: 计算机组成_北京大学_中国大学MOOC(慕课) 3 - 2 - 302-门电路的基本原理(11-39--)_哔哩哔哩_bilibili 现代计算机的CPU和其他很多功能部件都是基于晶体管的集成电路,想要了解计算机组成的基本原理,还是需要有…...

python元组的不可变性和应用场景
Python元组是一种不可变的数据类型,也就是说一旦创建后,其元素无法被修改、添加或删除。元组使用圆括号来表示,元素之间使用逗号进行分隔。 以下是创建和访问元组的方法和语法: 创建元组: 使用圆括号直接创建ÿ…...

配置化开发的核心设计 - Schema
前端配置化SchemaServerless FaaS BaaS useImperativeHandle() react-helmet 参考链接 schema进入...

HTTP协议概述
HTTP 协议定义 HTTP协议,直译为超文本传输协议,是一种用于分布式、协作、超媒体的信息系统的应用协议。HTTP协议是万维网数据通信的基础。HTTP协议在客户端-服务器计算模型中充当请求-响应协议。客户端向服务器提交HTTP请求消息。服务器提供HTML文件和其…...

fastjson2 打开 AutoType
1. 功能简介 FASTJSON支持AutoType功能,这个功能在序列化的JSON字符串中带上类型信息,在反序列化时,不需要传入类型,实现自动类型识别。 2. AutoType安全机制介绍 必须显式打开才能使用。和fastjson 1.x不一样,fast…...

封装(个人学习笔记黑马学习)
1、格式 #include <iostream> using namespace std;const double PI 3.14;//设计一个圆类,求圆的周长 class Circle {//访问权限//公共权限 public://属性//半径int m_r;//行为//获取圆的周长double calculateZC() {return 2 * PI * m_r;} };int main() {//通…...

PyTorch 模型性能分析和优化 - 第 3 部分
这[1]是关于使用 PyTorch Profiler 和 TensorBoard 分析和优化 PyTorch 模型主题的系列文章的第三部分。我们的目的是强调基于 GPU 的训练工作负载的性能分析和优化的好处及其对训练速度和成本的潜在影响。特别是,我们希望向所有机器学习开发人员展示 PyTorch Profi…...

【力扣每日一题】2023.9.1 买钢笔和铅笔的方案数
目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 题目给我们三个数,一个是我们拥有的钱,一个是钢笔的价格,另一个是铅笔的价格。 问我们一共有几种买笔…...

实现不同局域网间的文件共享和端口映射,使用Python自带的HTTP服务
文章目录 1. 前言2. 本地文件服务器搭建2.1 python的安装和设置2.2 cpolar的安装和注册 3. 本地文件服务器的发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 数据共享作为和连接作为互联网的基础应用,不仅在商业和办公场景有广泛的应用…...

Kubernetes技术--k8s核心技术Pod
(1).概述 Pod 是 k8s 系统中可以创建和管理的最小单元,是资源对象模型中由用户创建或部署的最小资源对象模型。 k8s不会直接处理容器,而是 Pod,Pod 是由一个或多个 container 组成。 一个pod中的容器共享网络命名空间。 Pod是一个短暂存在的。 (2).为什么k8s中最小单元是…...

基于Springboot实现的Echarts图表
概述 ECharts是百度开源的一个前端组件。它是一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,Safari等)&…...

adb server version (41) doesn‘t match this client (39)
异常: adb server version (41) doesnt match this client (39); killing... ADB server didnt ACK安装ADB后:查看版本 $ adb version Android Debug Bridge version 1.0.39 Version 1:8.1.1-1r23-5.4-1eagle Installed as /usr/lib/android-sdk/platf…...

B080-RabbitMQ
目录 RabbitMQ认识概念使用场景优点AMQP协议JMS RabbitMQ安装安装elang安装RabbitMQ安装管理插件登录RabbitMQ消息队列的工作流程 RabbitMQ常用模型HelloWorld-基本消息模型生产者发送消息导包获取链接工具类消息的生产者 消费者消费消息模拟消费者手动签收消息 Work QueuesSen…...

关于岛屿的三道leetcode原题:岛屿周长、岛屿数量、统计子岛屿
题1:岛屿周长 给定一个 row x col 的二维网格地图 grid ,其中:gridi 1 表示陆地, gridi 0 表示水域。 网格中的格子 水平和垂直 方向相连(对角线方向不相连)。整个网格被水完全包围,但其中恰…...

lintcode 1081 · 贴纸拼单词【hard 递归+记忆化搜索才能通过】
题目 https://www.lintcode.com/problem/1081/ 给出N种不同类型的贴纸。 每个贴纸上都写有一个小写英文单词。 通过裁剪贴纸上的所有字母并重排序来拼出字符串target。 每种贴纸可以使用多次,假定每种贴纸数量无限。 拼出target最少需要多少张贴纸?如果…...

HarmonyOS/OpenHarmony(Stage模型)应用开发单一手势(二)
三、拖动手势(PanGesture) .PanGestureOptions(value?:{ fingers?:number; direction?:PanDirection; distance?:number}) 拖动手势用于触发拖动手势事件,滑动达到最小滑动距离(默认值为5vp)时拖动手势识别成功&am…...

计算机毕设之基于Python+django+MySQL可视化的学习系统的设计与实现
系统阐述的是使用可视化的学习系统的设计与实现,对于Python、B/S结构、MySql进行了较为深入的学习与应用。主要针对系统的设计,描述,实现和分析与测试方面来表明开发的过程。开发中使用了 django框架和MySql数据库技术搭建系统的整体架构。利…...

Kotlin inline、noinline、crossinline 深入解析
主要内容: inline 高价函数的原理分析Non-local returns noinlinecrossinline inline 如果有C语言基础的,inline 修饰一个函数表示该函数是一个内联函数。编译时,编译器会将内联函数的函数体拷贝到调用的地方。我们先看下在一个普通的 kot…...