leetcode216组合总和III

本题思考:
在这里插入图片描述
对于输入样例k=3,n=9
输出里面为什么只有
[[1,2,6],[1,3,5],[2,3,4]]而没有下图所示的重复情况出现呢?

在这里插入图片描述
当时代码写错了,思考许久不得解,后面经过仔细对比代码之后发现是我的代码出现了逻辑错误,而正是这一关键的一个变量名写错导致了我一道递归写一天,太FFFFKKKKK了!!!
关键性代码逻辑
下面是错误的

for(int i=idx;i<=9;++i){// if(!visited[i]){visited[i]=1;sum+=i;v.push_back(i);dfs(k,n,idx+1,sum);sum-=i;v.pop_back();visited[i]=0;// }}

这个是正确的

for(int i=idx;i<=9;++i){// if(!visited[i]){visited[i]=1;sum+=i;v.push_back(i);dfs(k,n,i+1,sum);//关键是这里i写成了idx,导致了关键逻辑错误!!!sum-=i;v.pop_back();visited[i]=0;// }}

分析只有1->2->6而没有1->6->2的原因:
递归入口写dfs(k,n,i+1,sum);不写dfs(k,n,idx+1,sum);保证了每次i都是越来越大的,遍历完1->2->6之后遍历到1->6的时候,接下来函数入口是1->6->7,1->6->8,不再会从1开始,所以1->6->2这种又从起始点开始的就会有重复现象产生!!!!!!a1->a2->a3这里面是a1<a2<a3的!!!,因为这是递增的!!!,每次都是从i+1的dfs函数入口递增!!!!!!

正解代码如下!,这里的visit数组是没用的!


class Solution {
public:vector<int> v;vector<vector<int>> vv;vector<int> visited={0,0,0,0,0,0,0,0,0,0,0};vector<vector<int>> combinationSum3(int k, int n) {vv.clear();v.clear();dfs(k,n,1,0);return vv;}void dfs(int k,int n,int idx ,int sum){if(sum>n){return;}if(v.size()>=k){if(sum==n)vv.push_back(v);return;}for(int i=idx;i<=9;++i){// if(!visited[i]){visited[i]=1;sum+=i;v.push_back(i);dfs(k,n,i+1,sum);sum-=i;v.pop_back();visited[i]=0;// }}}
};

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

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

相关文章

了解一下npm i的流程与原理

流程 执行npm install&#xff0c;先判断有无lock文件。 1、没有lock文件。会先根据依赖构建出扁平的依赖关系决定下哪些包。新版本的依赖关系是扁平化的&#xff0c;老版本是树结构&#xff0c;可能会出现依赖重复安装的问题&#xff0c;老版本示意图如下&#xff1a; 作为前…

Jupyter notebook修改默认存储位置

1. 首先&#xff0c;打开Anaconda Prompt 输入命令&#xff1a; jupyter notebook --generate-config2. 根据刚才命令行输出的结果找到config文件&#xff0c;如图所示 3. 打开文件 ctrl F &#xff0c;然后输入notebooks and kernels找到对应的内容&#xff0c;在The dire…

Git实现提交代码自动更新package.json版本号

此文章主要讲诉如何通过git提交代码来自动更新我们的版本号&#xff0c;也可以指定固定分支才能更新 只要涉及到package version的项目都可以&#xff0c;例如&#xff1a;Vue、React、Node等等 前提是当前项目已经关联了Git仓库 一、编写我们的Node更新版本逻辑&#xff0c;名…

Qt与编码

ASCII码:一个字节&#xff0c;256个字符。 Unicode:字母&#xff0c;汉字都占用两个字节。 utf-8:字母一个字节&#xff0c;汉字3个字节。 gbk:字母一个字节&#xff0c;汉字2个字节。 gb2312:可以表示汉字&#xff0c;gb2312<gbk。 编码查看&#xff1a; https://www.…

实时通讯技术实现

实时通讯技术实现 前言 在CS架构中&#xff0c;经常会有实时通信的需求。客户端和服务端建立连接&#xff0c;服务端实时推送数据给客户端。本文介绍几种常见的实现方式&#xff0c;希望能给读者们一点点参考。 实时通讯的主要实现技术 长轮询(Long Polling) WebSocket 服务器发…

C++初阶篇----内存管理

目录 引言1. 内存分布2.C动态内存管理方式&#xff1a;malloc/calloc/realloc/free3. C动态内存管理:new和delete3.1内置类型3.2 自定义类型 4.operator new与operator delete函数4.1 operator new 与operator delete函数 5. new和delete的实现底层5.1 内置类型5.2 自定义类型 …

Redis 特性,为什么要用Redis,Redis到底是多线程还是单线程

一、Redis介绍 Redis&#xff08;Remote Dictionary Server )&#xff0c;即远程字典服务&#xff0c;是一个开源的&#xff0c;使用C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。 二、特性(为什么要用Redis&#x…

如何注册谷歌邮箱gmail

不知道大家在工作生活中有没有需要用到谷歌邮箱的地方&#xff0c;但是最近我就用到了它。因为注册ChatGPT的事&#xff0c;用了outlook&#xff0c;hotmail邮箱注册的gpt账号都被封了&#xff0c;然后通过各方面的了解&#xff0c;发现谷歌的邮箱是没有问题的&#xff0c;不会…

基于springboot的人事管理系统

人事管理系统 摘 要 人事管理系统理工作是一种繁琐的&#xff0c;务求准确迅速的信息检索工作。随着计算机信息技术的飞速发展&#xff0c;人类进入信息时代&#xff0c;社会的竞争越来越激烈&#xff0c;人事就越显示出其不可或缺性&#xff0c;成为学校一个非常重要的模块。…

小狐狸JSON-RPC:钱包连接,断开连接,监听地址改变

detect-metamask 创建连接&#xff0c;并监听钱包切换 一、连接钱包&#xff0c;切换地址&#xff08;监听地址切换&#xff09;&#xff0c;断开连接 使用npm安装 metamask/detect-provider在您的项目目录中&#xff1a; npm i metamask/detect-providerimport detectEthereu…

36-递归与迭代

36-1 用递归和迭代解决问题 1、求n的阶乘 公式&#xff1a; n!123...(n-1)n。用递归方式定义&#xff1a;0!1&#xff0c;n!(n-1)!n。 代码1&#xff1a; 我们先回忆一下之前用循环怎么实现的吧 非递归&#xff0c;也可称迭代&#xff1a; int main() {int n 0;scanf(&q…

书生浦语训练营2期-第一节课笔记

笔记总结: 了解大模型的发展方向、本质、以及新一代数据清洗过滤技术、从模型到应用的典型流程、获取数据集的网站、不同微调方式的使用场景和训练数据是什么&#xff0c;以及预训练和微调在训练优势、通信/计算调度、显存管理上的区别。 收获&#xff1a; 理清了预训练和微调…