18.4Sum

作者: 夏臻Rock | 来源:发表于2018-03-20 10:54 被阅读0次
    题目

    思路:

    四个数相加的和等于目标,且要去重复

    代码:

    class Solution {
        public List<List<Integer>> fourSum(int[] nums, int target) {
            List<List<Integer>> result = new ArrayList<>();//数组初始化
           
           if(nums.length<=3 || nums==null){
               return result;
           }
           
           Arrays.sort(nums);//数组排序,方便后面进行去重复
    
           for(int i =0;i<nums.length;i++){
               if( i>0 && nums[i]==nums[i-1] ) continue; //注意:必须把i>0写在&& nums[i]==nums[i-1]的前面,因为i>0这个条件就是为了让nums[i-1]取值时不会发生越界错误,如果把i>0放到&&后面了就毫无意义了。
               for(int j = i+1;j<nums.length ;j++){
                   if(nums[j]== nums[j-1] && j>i+1) continue;
                   int begin = j+1;
                   int end = nums.length-1;
                   while(begin <end){
                       int sum = nums[i]+nums[j]+nums[begin]+nums[end];
                       if(sum == target){
                           List<Integer> list = new ArrayList<>();
                           list.add(nums[i]);
                           list.add(nums[j]);
                           list.add(nums[begin]);
                           list.add(nums[end]);
                           result.add(list);
                           begin++;
                           end--;
                           while(begin<end && nums[begin]==nums[begin-1]) begin++;
                           while(begin<end && nums[end]== nums[end+1]) end--;
                       }else if(sum>target){
                           end --;
                       }else{
                           begin++;
                       }
                       
                   }
               }
           }
           return result;
        }
    }
    
    
    

    相关文章

      网友评论

          本文标题:18.4Sum

          本文链接:https://www.haomeiwen.com/subject/dievqftx.html