LeetCode15三数之和 容易理解版本
创始人
2024-05-29 21:01:43
0

题目: 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请返回所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组。

示例 1:

输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
解释:
nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0 。
nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0 。
nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0 。
不同的三元组是 [-1,0,1] 和 [-1,-1,2] 。
注意,输出的顺序和三元组的顺序并不重要。

示例 2:

输入:nums = [0,1,1]
输出:[]
解释:唯一可能的三元组和不为 0 。

示例 3:

输入:nums = [0,0,0]
输出:[[0,0,0]]
解释:唯一可能的三元组和为 0 。

思路:

逐个遍历数组,确定第一个元素后,剩下的两个数字就是和为 target - nums[i] 的两个数字了,因此将确定元素的下一个索引和target-nums[i]传给两个数相加和为某个数的函数,由该函数返回所有满足和为target-nums[i]的二维vector,将返回的结果遍历,如果结果不为空,每次循环将刚在确定的第一个数加进这个一维vector中组成一个和为0的三元组,再将这个三元组加入到vector中,在最后需要跳过第一个数组重复的情况,否则可能会出现重复的结果。

vector> twoSumtarget(vector& nums,int start,int target) {int left = start;int right = nums.size() - 1;vector> res;while (leftint leftnum = nums[left];int rightnum = nums[right];int sum = nums[left] + nums[right];if (sum while (left < right&&nums[left] == leftnum) {left++;}}else if (sum > target) {while (left < right && nums[right] == rightnum) {right--;}}else if(sum == target){res.push_back({ nums[left],nums[right] });while (left < right && nums[left] == leftnum) {left++;}while (left < right && nums[right] == rightnum) {right--;}}}return res;
}vector> threeSumtarget(vector& nums, int target) {sort(nums.begin(),nums.end());int numsize = nums.size();vector> res;for (int i = 0; i < numsize;i++) {vector> tuples = twoSumtarget(nums,i+1,target-nums[i]);//如果存在满足条件的二元组,再加上nums[i]结果就是三元组for (vector& tuple:tuples) {tuple.push_back(nums[i]);res.push_back(tuple);}//跳过第一个数字重复的情况,否则可能会出现重复结果while (i < numsize - 1 && nums[i] == nums[i + 1]) i++;}return res;
}int main() {vector c{ -1,0,1,2,-1,4 };int target = 0;vector> result= threeSumtarget(c,target);for (vector>::iterator it = result.begin(); it != result.end();it++) {for (vector::iterator pit = (*it).begin(); pit != (*it).end();pit++) {cout<<*pit<<" ";}cout << endl;}return 0;
}

相关内容

热门资讯

windows打开系统设置,轻... Windows系统设置详解:轻松掌握系统个性化与优化在Windows操作系统中,系统设置是用户管理和...
windows会议系统,功能、... 深入解析Windows会议系统:功能、优势与实际应用随着信息技术的飞速发展,会议系统在企业和机构中的...
windows读苹果系统硬盘,... Windows系统如何读取苹果系统硬盘了解苹果系统硬盘格式苹果电脑的硬盘通常使用的是APFS(App...
windows安装系统还原,W... Windows系统安装与还原全攻略一、Windows系统安装前的准备工作在进行Windows系统安装...
windows版mac系统下载... Windows版Mac系统下载:体验苹果生态的便捷之道了解Mac系统Mac系统,全称为macOS,是...
windows95系统的电脑,... Windows 95:经典操作系统回顾与影响Windows 95,作为微软公司于1995年8月24日...
windows管理员登录系统,... Windows管理员登录系统的详细指南在Windows操作系统中,管理员账户拥有最高的系统权限,可以...
windows98系统之家,重... Windows 98系统之家:重温经典,探索历史一、Windows 98简介Windows 98,作...
windows官方系统下载安装... Windows官方系统下载安装指南一、选择合适的Windows版本在开始下载之前,首先需要确定您需要...
windows换deepin系... Windows换Deepin系统安装教程 一、准备工作在进行Windows系统更换为Deepin系统...
安装影子系统重启蓝屏,安装影子... 安装影子系统后重启蓝屏,原因及解决方法详解影子系统作为一种数据保护工具,能够在系统崩溃或数据丢失时恢...
windows操作系统s发音,... Windows操作系统S模式的发音与功能解析什么是Windows操作系统S模式?Windows操作系...
windows安装无法选择系统... Windows安装过程中无法选择系统版本的原因及解决方法在安装Windows操作系统时,有些用户可能...
报刊亭怎么安装空调系统,报刊亭... 报刊亭空调系统安装指南随着夏季的到来,气温逐渐升高,报刊亭作为城市中不可或缺的一环,其内部环境的舒适...
windows操作系统有什么用... Windows操作系统:功能强大,应用广泛Windows操作系统,作为微软公司研发的桌面操作系统,自...
保时捷卡宴香氛系统安装,为您的... 为您的保时捷卡宴升级香氛系统,提升驾驶体验随着汽车科技的不断发展,越来越多的豪华汽车开始配备香氛系统...
windows查看最近一次系统... 如何在Windows系统中查看最近一次系统安装时间随着计算机技术的不断发展,操作系统已经成为我们日常...
windows操作系统86位,... 深入解析Windows操作系统的86位版本:优势与挑战随着计算机技术的不断发展,操作系统也在不断进化...
安卓系统如何安装whatAPP 安卓系统如何安装WhatsApp:一步步教程WhatsApp是一款全球流行的即时通讯应用程序,它允许...
安装音箱系统,打造完美音质体验... 打造完美音质体验——家庭音箱系统安装指南随着生活品质的提升,越来越多的家庭开始注重家庭影院的搭建。而...