自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(62)
  • 收藏
  • 关注

原创 matlab仿真 数字信号载波传输(下)

(1)这里的图像只画出了前4个符号的图像,我们在设定msg信号的时候就已经确定了前4个符号为0 1 3 2,之后经过fsk调制之后,每个符号采样了60个点,所以4个符号的总长度是240(FSK调制之后用60个点表示一个符号),在使用plot进行函数的绘制时,范围是从1->4*fs=240。此书中的瑞利信道的产生函数rayleighchan已经在新版本中无法使用了,所以采用新的函数comm.RayleighChannel产生瑞利信号,这个函数的使用方法可以参见。确认目前采用的doppler的位置,

2024-07-26 16:42:33 379

原创 matlab仿真 数字信号载波传输(上)

首先,一个符号传递的时间为T=1秒,所以一共有8个符号(PSKMOD处理后信号的长度不变,仍然是8个),所以整个信号传输共8秒,这里的抽样时间间隔为0.01,所以理论上一共有800个点,实际上t为101,就是因为算上了0这个点,在x的向量中也算上了0这个点,所以长为801,但是在进行载波调制的时候使用的是用t构造出来的c(长度也为101)和msg_psk(长度为8)相乘,结果出现了808的长度,(4)这里是用信噪比和信号功率求出噪声幅度,首先在求功率的时候使用了幅度的平方,所以最外面需要加上根号。

2024-07-25 19:47:40 426

原创 matlab仿真 数字基带传输(下)

(1)因为调制信号在发送端和接收段均使用根升余弦滤波器进行滤波,所以一共要使用根升余弦滤波器进行两次相关,总体思路如下。/SIMULINK 通信系统建模与仿真 刘学勇编著第六章内容,有兴趣的读者请阅读原书)在此可以简述为:在此次滤波过程中分母系数为1,分子系数为num。(2)理论的误符号率是通过式6-25推出来的。(1)关于函数impz的使用,详见。

2024-07-24 22:12:35 143

原创 matlab仿真 数字基带传输(上)

由图6-2,可知,得到信号r(t)后让r(t)对s0和s1做互相关,若一个位置s0的互相关结果比s1的互相关结果大,那么这个位置可以被判决为s0,反之可以判决为s1。例6.4和6.1的区别是,因为s0和s1是双极性信号,所以判决时只需要求一个互相关的情况,然后与0比较即可得出结果。因为阈值是信号能量Eb/2,所以s(t)的能量=10*1的平方=10;这里的s0设置成了0 0 0 0 0 0 0 0 0 0(即只有n(t))s1为1 1 1 1 1 1 1 1 1 1(s(t)和n(t))

2024-07-24 10:21:52 375

原创 matlab仿真 模拟调制(下)

(内容源自详解MATLAB/SIMULINK 通信系统建模与仿真 刘学勇编著第五章内容,有兴趣的读者请阅读原书)求调频指数的公式为:kf*Amax/fm,其中的Amax是振幅的最大值,这里可以理解为消息序列的最大绝对值。(1):在求FM信号相位的过程中。

2024-07-23 17:01:00 236

原创 matlab仿真 模拟调制(上)

这里我们每隔0.1秒产生一个符号,时间长度为10s,所以一共产生100个符号,又因为采样时间为0.0025,所以我们每个符号都采样40次(0.1/0.0025),采样40次的效果就是每个序号在采样之后都出现了40次重复的情况(这里用ones实现了该效果)首先是生成消息序列时的操作,我们生成的是模拟信号,所以要进行采样转化为数字信号。在构建低通滤波器时,思路如下(pi处是高频,2pi处是低频)这次的代码是用滤波法实现单边带信号的,滤波的思路如下图。和AM的思路一样,都是先生成消息序列,后构建数字信号。

2024-07-10 21:49:10 292

原创 matlab仿真 信道(下)

(内容源自详解MATLAB/SIMULINK 通信系统建模与仿真 刘学勇编著第四章内容,有兴趣的读者请阅读原书)积分清除模块只完成了对数据的累加,没有归一化,需要用增益模块对累加的数据进行归一化。这里我们已经完成了模型文件的建立,将文件命名为ex7.mdl进行保存。注意:这里输入大写的SNR会报错,无视报错点击OK。系统框图如图所示,TX和RX 模块需要单独实现。与Tx相同,将Rx的两个输出端口名称分别改为。之前的内容还剩下simulink的仿真过程。完成对一个符号的抽样数据并进行累加。

2024-07-09 11:07:35 446

原创 matlab仿真 信道(上)

因为我们每个脉冲设置8个抽样点,这里发送时间只有一秒,所以就是在1秒钟发送10000个符号,每个符号采样8次,所以每次差1/80000秒,也就是信号的抽样时间间隔(这里个人理解书上的题目可能是多写了一个0,那里的多普勒频移也是多写了一个0).这里和4.6不同的地方在于,我们在采用瑞利噪声时需要设置时间变量,这里题目已经写明信号的抽样时间间隔为1/80000s,这里的代码是书上直接给出的,本人还不能理解,这里直接将其作为产生瑞利衰落的已知函数进行使用(,两者函数底层代码的实现方式不同,所以使用的方式也不同。

2024-07-08 21:33:12 318

原创 matlab仿真 通信信号和系统分析(下)

(内容源自详解MATLAB/SIMULINK 通信系统建模与仿真 刘学勇编著第三章内容,有兴趣的读者请阅读原书)虽然DFT内部采用的是循环卷积,但是我们可以利用DFT实现线性卷积结果的求解。这里用两种方得到的结果相同证明DFT运算内部是采用循环卷积而不是线性卷积。可以看到解析信号只包含正频率部分,且幅度值是原始信号频谱幅度值的两倍。总结来说,就是利用解析信号和频移公式实现了带通信号的低通表示。

2024-07-02 11:50:33 276

原创 matlab仿真 通信信号和系统分析(上)

这里有一个有意思的点,就是第9行的n1是从0开始的,但是在例3.10中的第4行h(n+1)中n+1是从1开始的,这是因为h(n+1)中是明确把n+1当做h的索引值了,只有正整数才能作为数组的索引值,而本例中只有利用n进行乘法运算,没有当做索引值,所以可以从0开始。这题中我们是使用手动积分算出傅里叶级数的表达式后直接对表达式进行画图的,个人理解是因为无穷长的信号在matlab中表示较为复杂,所以反而是手动求解更快。此题中是周期信号,不可积分,所以无法使用傅里叶变换,所以采用傅里叶级数进行求解。

2024-06-30 17:05:15 282

原创 matlab中simulink仿真软件的基础操作

双击正弦信号发生器,进行信号参数的设置,(其中amplitude为幅度,frequency为频率,phase为相位)我们将第一个发生器设置为振幅为2,频率相位采用默认值,同样的方法设置第二个频率设置为2,相位设置为pi/2,设置完成后点击apply即。我们组装一个相加器,需要两个输入、相加器和一个输出,此时subsystem有了一个输入和一个输出,现在我们可以选中输入(1),ctrl+c,ctrl+v复制出一个新的输入。先点击工具栏中的run,运行程序,之后双击示波器,观察元器件的输出结果。

2024-06-29 21:55:57 323

原创 代码随想录算法训练营第六十天|84.柱状图中最大的矩形

因为heights[i] == heights[st.top()],也就是说,如果最后的结果中用到了heights[i],那就必然也会用到 heights[st.top()],而i相对于st.top()有着更远的距离,肯定是i得到的结果更大,所以加上st.pop()就是直接考虑i的情况,而不加就是st.top()和i都考虑。st.pop()加不加对结果没有影响,加上的话在情况三的计算中可以减少运算。这题和之前的单调栈的题思路正好相反,当遇见小于栈顶元素的情况单独处理。

2024-06-04 17:25:19 107

原创 代码随想录算法训练营第五十八天|503.下一个更大元素II,42. 接雨水

我们在计算雨水时需要长乘上高,长的计算是需要序号相减的,在图中情况下,我们需要拿第二个5的序号值去更新第一个5的序号值,从而确保得到的雨水长是正确的。首先确定雨水一定是凹型才能接住,所以单调栈的设定为与更大元素的设定一样,碰见小于栈顶的元素直接入栈。首先,能接多少雨水是由两边更高的数字中比较矮的数字(2、3中的2)决定的,利用i%nums.size()可以实现循环两次。雨水的高还需要在这基础上减去底座(1)的高度。

2024-06-04 16:29:08 141

原创 代码随想录算法训练营第五十七天|739. 每日温度,496.下一个更大元素 I

nums2元素序号-------(单调栈得到结果——nums2的result数组)-------->nums2元素-------(利用nums2元素和nums1元素部分相同——nums1的result数组)-------->所以我们需要建立一个nums1元素和nums1元素序号一一对应的map数组,map的key值是nums1元素,这样就可以通过元素得到。nums1元素序号,nums1元素,nums2元素,nums2元素序号,单调栈。思路和上题一样,主要是要建立nums1 和 nums2 元素的对应关系,

2024-06-04 15:42:38 172

原创 代码随想录算法训练营第五十六天|647. 回文子串,516.最长回文子序列

其实也不一定,eg:aaab,可以发现,0位置的a和3位置的b不相等,但是dp[0][3]要想得到正确的结果,必须继承dp[0][2](aaa)的子序列长度情况,如果直接放弃0位置和3位置,只继承dp[1][2](aa),就会造成数据的缺失。所以dp[i][j] = max(dp[i + 1][j], dp[i][j - 1])至于初始值的设定,需要考虑之前没有考虑的i==j的情况,设定dp[i][i]=1。=s[j]时,很容易推出dp[i][j]=false;当s[i]=s[j]中,需要考虑三种情况。

2024-06-03 11:40:58 254

原创 代码随想录算法训练营第五十五天|583. 两个字符串的删除操作,72. 编辑距离

只要求出两个字符串的最长公共子序列长度即可,最后用两个字符串的总长度减去两个最长公共子序列的长度就是删除的最少步数。dp[i][j]=dp[i-1][j-1]dp[0][i]表示word1长度为0,word2长度为i,两者相同需要word2删除i次。添加(等于另一侧删除)dp[i][j]=dp[i][j-1]+1;改变(没有删除)dp[i][j]=dp[i-1][j-1]+1;删除:dp[i][j]=dp[i-1][j]+1;同理,dp[i][0]=i。所以dp[0][i]=i。这里选择最小的情况就型。

2024-06-02 21:30:13 212

原创 代码随想录算法训练营第五十三天|392.判断子序列,115.不同的子序列

t[j - 1],此时相当于t要删除元素,t如果把当前元素t[j - 1]删除,那么dp[i][j] 的数值就是 看s[i - 1]与 t[j - 2]的比较结果了,即:dp[i][j] = dp[i][j - 1];每一次出现有字母相同的情况,不仅要继承之前的已经有的子序列的个数(dp[i-1][j]),还有新产生的子序列个数(dp[i-1][j-1]),这里dp[i-1][j-1]和dp[i][j]数量是完全相同的,只是子序列更长了。当s[i-1]和t[i-1]相同时,子序列长度加一。

2024-06-02 20:56:00 235

原创 代码随想录算法训练营第三十六天|738.单调递增的数字

位置的初始值一定要是nums.size(),这是为了确保当数字已经是单调递增时,不会有位置变成9。但是从前往后,第一个3和第二个3相等,等到递归到2的时候已经没有机会再去更改3了。关键还是循环顺序,是从后往前循环,因为有时候需要动最高位的数字。第二个技巧是记录需要变9的位置,此位置以后所有的数字都要变成9。这题的一般思路是——非单调位置-1,后面所有数字都变成9.以332为例,从后往前是332->329->299,738.单调递增的数字。

2024-05-30 17:50:58 110

原创 代码随想录算法训练营第五十二天|300.最长递增子序列,1035.不相交的线,53. 最大子序和

思路就是,如果dp[i-1]+nums[i]比nums[i]小,也就证明,dp[i-1](i前面几项的和)已经对子序和是一种"拖累",我们需要将它们全部舍弃,重新开始。首先来看递推公式,一个方向是dp[i]=dp[i-1]+nums[i],但是,并不是任何nums[i]都需要加上的,dp[i]会一直增加吗,显然不会,当i和i之后的数据全都小于0时,dp[i]会下降。所以返回的一定不能是dp[nums.size()],而是在这个过程中的最大值。可以注意到dp[1][1]得到的信息并没有传输给dp[3][2]

2024-05-30 17:35:53 122

原创 代码随想录算法训练营第五十一天|300.最长递增子序列,674. 最长连续递增序列,718. 最长重复子数组

dp[i]的推导需要用到i之前的dp数组的值,当nums[i] > nums[j]时,也就是说i可以在以j为末尾的最长子序列上再延长1.dp[i][j]表示以i-1为结尾的A,和以j-1为结尾的B,最长重复子数组的长度为dp[i][j]这题相对于上题题目添加了限制条件,连续要求dp[i]只能通过dp[i-1]推导出来。这样做的好处是方便初始化,可以将dp[0][j],dp[i][0]直接初始化为0。dp数组的含义为dp[i]表示字符串以第i位置为末尾的最长递增子序列的长度。

2024-05-27 20:43:04 192

原创 代码随想录算法训练营第三十五天|435. 无重叠区间、763.划分字母区间

这里的方法是十分巧妙的,由于i是从小到大依次循环,指定字母的值小的会被大的值给覆盖,最后仅用一次循环就实现了最后位置的寻找。这题的思路就是找到每个区间中的字母最后出现的位置,关键是位置怎么找。先对区间进行排序,优先去除交集区间。

2024-05-27 19:45:13 255

原创 代码随想录算法训练营第五十天|309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费

这里有个问题需要处理一下,如果是昨天卖出股票(处于卖出的状态)那么今天一定是处于冷冻期(dp[i][3]),今天是无法进入买入股票的状态的,也就是dp[i][0]不能根据dp[i-1][2]推导出来。dp[1][0]可由dp[0][3]推导,在第一天冷冻第二天买入股票的情况下,要想推导正确,只能将dp[0][3]设置为0,dp[0][2]同理。dp[i][0]由dp[i-1][0]、dp[i-1][2]、dp[i-1][3]推导。dp[i][2]由dp[i-1][2],dp[i-1][0]

2024-05-26 16:00:19 192

原创 代码随想录算法训练营第三十四天|860.柠檬水找零、406.根据身高重建队列、452. 用最少数量的箭引爆气球

先考虑身高维度,将身高从大至小进行排列,[5,2]表明在该同学的前面有两个比他更高的人,与从大到小的排列顺序相互对应,之后在根据people[i][1]提供位置数据,将数组中的元素插入到对应的位置上面。遇到账单20,优先消耗美元10,完成本次找零。因为5的用处更大,等到循环结束的时候,如果存在某个美元不够用的情况,那么就是无法找零。优先用箭去射击区间的交集,先。

2024-05-26 15:35:12 217

原创 代码随想录算法训练营第三十三天|1005.K次取反后最大化的数组和,134. 加油站

如果到第i个站台净收益小于0了,那么这个站台(和与这个站台同时纳入sum计算的之前的站台)都不能作为起点,只能从第i+1个站台进行考虑。这里首先每一个站台都是有净收益的,净收益等于该站台所提供的油量-到该站台所消耗的油量。先把所有负数都取反成正数,之后把所有次数都用来对绝对值最小的数字进行取反。1.正向遍历,当第i+1大于i时,i+1处的糖果数量比i多1;2.反向遍历,当第i大于第i+1时,i处的糖果比i+1多1;我们遍历每个站台的净收益,用sum记录遍历的站台净收益之和。优先把绝对值较大的负数取反。

2024-05-24 16:23:41 234

原创 代码随想录算法训练营第四十八、四十九天|121. 买卖股票的最佳时机1-4

dp[2][3]和dp[2][1]的本质其实是一样的,dp[2][3]表示在第2天买入、卖出、再买入,与dp[2][1]的买入是相同的(同一天一次买入和一次卖出相互抵消)考虑递推公式时,dp[i][j]的推导需要前一天的数据(dp[i-1][j]),其中。dp[0][0]很容易想到是0,i=0表示是第0天(的股票价格),j=0表示还没有进行操作,收益自然是0。如果第i天做了操作,那么就是在前一天的基础上(dp[i-1][j-1])再进行一次操作。所以dp[0][1]=-price[0]

2024-05-24 16:09:31 125

原创 代码随想录算法训练营第四十七天|198.打家劫舍

(cur->left得到的{val2, val1}在返回上一级后,会被cur->left所继承,参与到cur这层的选择中)2.不取当前节点,则值为:左节点(取或不取的最大值)+右节点(取或不取的最大值)这里的dp数组大小为2,dp[0]表示不用当前节点,dp[1]表示使用当前节点。遍历的返回值均为数组,因为后序遍历二叉树可以将子节点的情况继承给父节点。1.取当前节点,则值为:当前节点的值+不取左节点的值+不取右节点的值。一定是后序遍历(根据子节点的dp大小选择是否将父节点加入)选择两种情况下的最大值。

2024-05-23 21:13:39 237

原创 代码随想录算法训练营第四十五天|139.单词拆分

这里我们要注意,我们并不是把“物品”放进“背包”,而是检查物品(数组中的元素)能不能组成背包 (s字符串),我们采取j-作为下标i来截取一段s中的字符串,如果这段字符串能够在数组中找到,同时dp[j]为true,那么证明dp[i]为true。关键就是数组中元素的遍历,我们需要得到的是dp[s.size()]是否为true,所以dp数组需要是一个bool类型的数组,元素遍历我们采取int类型的变量j进行循环。这题首先肯定是排序问题而不是组合问题,因为单词的顺序是一定的,所以组成单词的字符串顺序也是一定的。

2024-05-23 20:32:51 255

原创 代码随想录算法训练营第四十四天|70. 爬楼梯(进阶版)

INT_MAX这个条件是确保在利用dp[j - coins[i]]得到dp[j]的过程中,所使用的一定是更新过的dp[j - coins[i]],防止dp[j - coins[i]]为未更新过的初始值,影响dp[j]的正常推导。因为无论排列和组合,求出的最小商品数都是相同的,所以可以先循环容量,再循环商品,反过来也行。多重背包问题,代取商品就是从1:m的数组,背包的容量就是n,由于是求方法数,所以递推公式为。此题是求最小的情况,也就是把背包装满所用的最小的商品数,

2024-05-22 18:20:08 258

原创 代码随想录算法训练营第四十三天|

也是完全背包问题,但是需要求排列而不是组合,所以需要先遍历背包容量,再遍历物品。典型的完全背包问题,但这里是求有多少种组合方式,所以递推公式变为。

2024-05-22 16:05:27 198

原创 代码随想录算法训练营第四十二天|1049.最后一块石头的重量II,494.目标和,474.一和零

本题可以转化为:将石头分成尽量重量相同的两堆(重量相同相撞为0),分成两堆后剩下的石头重量就是题解。dp[j]表示容量为j的背包,最大可以携带的石头重量(价值)为dp[j],石头的重量是 stones[i],石头的价值也是 stones[i],所以递推公式为dp[j - stones[i]] + stones[i])表示消耗了 stones[i]的重量,获得了stones[i]的价值(重量)

2024-05-21 17:34:20 197

原创 代码随想录算法训练营第三十二天|122.买卖股票的最佳时机 II,

122.买卖股票的最佳时机 II。

2024-05-16 18:16:44 207

原创 代码随想录算法训练营第四十一天|416. 分割等和子集

首先是二维背包。递推公式表明推导出dp[i][j]需要dp[i-1][j],有两种推导途径1.现在背包剩余的容量j不够再放下标为i的物品,所以背包内的价值不变。2.背包内剩余容量还够放下物品,[j - weight[i]] + value[i]表示在dp[i-1][j]的基础上消耗了weight[i]的容量,额外得到了value[i]的价值。dp数组的初值也可以推导,dp[i][0]为0,因为容量为0,放下的物品为0,所以价值为0.

2024-05-16 17:00:06 257

原创 代码随想录算法训练营第三十一天|455.分发饼干,376. 摆动序列,53. 最大子序和

优先把小饼干分给胃口值小的,或者是把大饼干分给胃口大的。这里有一些初始值的设置是为了应对一些特殊情况的因为当nums尺寸大于等于2时,摆动序列长度至少为1;这里加上等于号是因为中间存在平坡的情况,如果不加等于号的话,第一个2其实也算摆动序列,但是不会被计入。result++;// 注意这里,只在摆动变化的时候更新prediff这里只在摆动变化时更新pre是为了防止非严格单调上升的序列在平坡开始处和平坡截止处各计算一次,导致摆动序列结果多了。

2024-05-15 20:07:01 302

原创 代码随想录算法训练营第四十天|343. 整数拆分,96.不同的二叉搜索树

dp[3],就是 元素1为头结点搜索树的数量 + 元素2为头结点搜索树的数量 + 元素3为头结点搜索树的数量。这里取到j <= i / 2是因为在拆成多个数字相乘的时候,一定是拆分成m个近似相同的子数相乘才是最大的。元素1为头结点搜索树的数量 = 右子树有2个元素的搜索树数量 * 左子树有0个元素的搜索树数量。元素2为头结点搜索树的数量 = 右子树有1个元素的搜索树数量 * 左子树有1个元素的搜索树数量。元素3为头结点搜索树的数量 = 右子树有0个元素的搜索树数量 * 左子树有2个元素的搜索树数量。

2024-05-15 16:09:12 218

原创 代码随想录算法训练营第三十天|332.重新安排行程,51. N皇后,37. 解数独

首先如果只根据前后站的关系找到一种可能的行程,然后将可能的行程与当前的字符最小行程进行比较,最后得到最小行程的思路会超时,所以一定要在回溯中就确保只有字符最小的情况进入回溯。map会对索引值进行排序,可以保证每一次都是字符最小的情况是票数的统计情况,每当我们插入一个站时,消耗了一张票,我们就把对应该票的票数减一。由于我们已经用map确保了字符最小,所以只要我们找到一种可能的情况,就能确定他是我们所需要的情况,直接返回就行,所以这里返回值为bool,从而确保只要找到情况即刻返回,不会继续递归。

2024-05-14 20:08:58 243

原创 代码随想录算法训练营第三十九天|62.不同路径,63. 不同路径 II

2.障碍物在第一行/第一例,在赋初值的时候会有影响,以第一行为例,当i列出现障碍物时,列数大于i的走法都变成0了。3.障碍物在其他地方,我们求一个格子的走法时,是将其左边格子的走法和上方格子的走法加起来,代码随想录中的思路则更加简单,遇见障碍物直接跳过赋值(因为dp数组初始值已经置为0了)如果左方格子是障碍物,那么只加上上方格子的走法,如果左上都是障碍物直接返回。然后需要确定初始值,需要第一行和第一列所有格子的走法。因为第一行/第一列是一条直线,所以走法只有一种。接下来考虑障碍物,分几种情况考虑。

2024-05-14 16:14:19 208

原创 代码随想录算法训练营第三十八天|70. 爬楼梯

也就是说,踩上楼梯是不需要花费的,只有从此楼梯再网上爬需要支付费用,所以0和1处的花费为0(因为这两处一开始就可以踩上去)i处的楼梯爬法是i-1处的爬法和i-2处的爬法之和(因为一次可以爬一格或者两格)。从i-1爬一格(因为往上爬了,需要支付i-1处的cost)从i-2爬两格(因为往上爬了,需要支付i-2处的cost)因为一次可以爬一格/两格,所以有两种思路。从两者中选小的就行了。

2024-05-13 22:13:28 115

原创 代码随想录算法训练营第二十八天|491.递增子序列

这题是在无法进行排序的情况下如何进行树层去重,思路是每一层都新建一个set容器进行比较每一树层插入一个数字,就会记录在set中,当这一层再次出现相同数字时,set中的find函数会发现这个数字已经被使用过,跳过该次循环。问题是我在函数外侧建立好set数组,每一层都重新清空可不可以、左边是重新建立set,右边是清空set,红色数字是代码执行的顺序可以看到,右边第4步的set容器继承了第三步的结果,再插入7,容器中只剩下7,4不见了。

2024-05-10 11:09:15 335

原创 代码随想录算法训练营第二十八天|93.复原IP地址

第三就是insert的使用方式s.insert(s.begin()+3,'.'),在字符串s的3处插入‘.’因为不能出现重复的组合,所以需要startIndex记录每次循环开始的位置(可以参考前几天的博客)这里的最后的返回结果是vector<string>,那么应该拿什么储存中途满足条件的变量?经典的树层去重(参考昨天的博客,写的很详细了),used[i-1]==false;由于这题最多只有四个数字,可以记录点(.)的个数,当点的个数=3时,子集需要树上的每一个节点都纳入结果,而不是只有最底下的节点。

2024-05-09 21:13:27 347

原创 代码随想录算法训练营第二十七天|39. 组合总和,40.组合总和II ,131.分割回文串

此时1(1)为首元素的树层情况已经构建完成,1(1)对应的位置used已经又由true变为false了,所以考虑1(2)时,1(2)就不会再进入path了。当i=0循环结束时。此时used已经变成[0,1,1],进入i=1的循环,由于满足continue的条件,i=1被跳过了。以[1(1),1(2),2]为例,当我们在进行树枝的构造时,使用过的元素,used对应的位置一定全是true,以[2,2,2],target=2为例,如果哦我们将used设置为true,现在的used就是[1,1,1]。

2024-05-09 17:19:48 632

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除