【N数之和】leetcode 1,15,18题 题解

本文介绍了如何解决LeetCode中关于求三数和与四数和的问题,遵循排序和使用HashSet避免重复的解题原则。通过示例代码展示了O(n^2)和O(n^3)复杂度的解决方案,适用于更高数量级的数之和问题。
摘要由CSDN通过智能技术生成

两数、三数、四数之和的通解


     leetcode上面的第一道题就是两数之和,这道题虽然很简单但是也蕴含着不少算法知识。但后面又接二连三地出现了“三数之和”、“四数之和”,便有聪明的同学想:难道就没有什么通解吗?事实上是有的,这也是本文的目的。

解这类问题的原则有以下两条
1,排序
2,使用hashSet检验重复

第一条就不用说了,如果不排序的话很难保证找出全部的解,也不方便检验重复。
第二条的hashset包括两部分:各级(除最后两级以外)的访问过的值的集合,最后两级中访问过的值的集合,话不多说,三数和四数之和的代码如下:

三数之和


        //三数之和
        //判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 09 ?
        //返回所有满足条件且不重复的三元组。
        public static IList<IList<int>> ThreeSum(int[] nums)
        {
            return ThreeSum(nums, 0);
        }

        //解题思想
        //使用“访问过的元素集合”来避免重复
        public static IList<IList<int>> ThreeSum(int[] nums, int target)
        {
            //初始化
            List<IList<int>> ans = new List<IList<int>>();
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值