zoukankan      html  css  js  c++  java
  • leetCode-nSum

    Given an array S of n integers, are there elements abc, and d in S such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.

    Note: The solution set must not contain duplicate quadruplets.

    For example, given array S = [1, 0, -1, 0, -2, 2], and target = 0.
    
    A solution set is:
    [
      [-1,  0, 0, 1],
      [-2, -1, 1, 2],
      [-2,  0, 0, 2]
    ]
    

     通用解决办法

    public static List<List<Integer>> kSum(int[] nums, int target) {
    List<List<Integer>> result = new ArrayList<List<Integer>>();
    Arrays.sort(nums);
    result = recursionRoutin(nums,0,4,0);
    return result;
    }

    public static List<List<Integer>> recursionRoutin(int[] nums,int begin,int k,int target){
    HashSet<List<Integer>> elementSet = new HashSet<List<Integer>>();
    List<List<Integer>> result = new ArrayList<List<Integer>>();
    List<List<Integer>> subResult = new ArrayList<List<Integer>>();
    //Recursion Base
    if(k == 2){
    int left = begin;
    int right = nums.length - 1;
    while(left < right){
    int sum = nums[left] + nums[right];
    if(sum == target){
    List<Integer> taplet = new ArrayList<Integer>();
    taplet.add(nums[left]);
    taplet.add(nums[right]);
    //Avoid reduplication
    if(!elementSet.contains(taplet)){
    result.add(taplet);
    elementSet.add(taplet);
    }
    left ++;
    right --;
    }else if(sum < target){
    left ++;
    }else{
    right --;
    }
    }
    return result;
    }else{
    for(int i = begin;i < nums.length - k - 1;i ++){
    subResult = recursionRoutin(nums,i + 1,k - 1,target - nums[i]);
    //System.out.println(k + " " + subResult);
    if (!subResult.isEmpty()) {
    for (int j = 0; j < subResult.size(); j++) {
    subResult.get(j).add(nums[i]);
    result.add(subResult.get(j));
    }
    }
    }
    }
    return result;
    }

      

  • 相关阅读:
    sprintf与snprintf
    风雨20年:我所积累的20条编程经验
    istream_iterator, ostream_iterator,copy以及文件序列化
    [转载]关于C++,我觉得好的设计法则
    如何高效地管理时间
    B站上适合程序员的学习资源【赶紧收藏!】
    Redis和Memcached的区别
    Swoole的多进程模块
    Mac OS 查看 ip 地址及 DHCP 各 addr 含义
    mac将phpstorm 从主屏移动到副显示器(解决)
  • 原文地址:https://www.cnblogs.com/daixianjun/p/leetcode-sumn.html
Copyright © 2011-2022 走看看