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;
    }

      

  • 相关阅读:
    window计时器函数
    日期函数
    字符的方法
    五大主流浏览器与四大内核
    向一个排好序的数组中插入一个数组。
    冒泡与排序
    数组去重方法1,2,3
    有执行语句:console.log(fn2(2)[3]),补充函数,使执行结果为"hello"
    面试题:一个函数的调用 fn(2)(3)(4) 得到的结果位24; 这个函数是柯里化函数运用了闭包原理
    python中append()与extend()方法的区别
  • 原文地址:https://www.cnblogs.com/daixianjun/p/leetcode-sumn.html
Copyright © 2011-2022 走看看