조합 수의 합계 2

이야기:

후보자 배열과 목표 수 목표가 주어지면 수의 합계를 목표로 할 수있는 후보자의 모든 조합을 찾으십시오.
후보자의 각 숫자는 각 조합에서 한 번만 사용할 수 있습니다.

기술:

모든 숫자 (대상 숫자 포함)는 양의 정수입니다.
솔루션 세트에는 반복되는 조합이 포함될 수 없습니다.

여기에 사진 설명 삽입

분석:

첫 번째 참조 :
하위 집합 찾기 I
하위 집합 찾기 II

이 질문은 판단 하위 집합 크기 및 조건 만 추가 됩니다.

서브 세트 II를 찾는 방법을 따라 먼저 모든 서브 세트를 찾은 다음 대상의 서브 세트로 요소 합계를 찾을 수 있습니다.

그러나 다시 왜냐하면 :
여기에 사진 설명 삽입그래서 우리는
여기에 사진 설명 삽입

암호:

class Solution {
    
    
    public List<List<Integer>> combinationSum2(int[] nums, int target) {
    
    
    List<List<Integer>> ans = new ArrayList<>();
    Arrays.sort(nums); //排序
    getAns(nums, 0, new ArrayList<>(), ans,0,target);
    return ans;
}

private void getAns(int[] nums, int start, ArrayList<Integer> temp, List<List<Integer>> ans, int sum,int target) {
    
    
     if(target==0){
    
    
       ans.add(new ArrayList<>(temp));
      return;
     }
    for (int i = start; i < nums.length; i++) {
    
    
        //和上个数字相等就跳过
        if (i > start && nums[i] == nums[i - 1]) {
    
    
            continue;
        }
        sum=sum+nums[i];
        if(sum>target){
    
      //剪枝操作
              return;
        }
         temp.add(nums[i]);
        if(target==sum){
    
       //符合要求,加入返回结果
           ans.add(new ArrayList<>(temp));
        }
        getAns(nums, i + 1, temp, ans,sum,target);
        temp.remove(temp.size() - 1);
        sum=sum-nums[i];

    }
}
}

출처 : LeetCode
링크 : https://leetcode-cn.com/problems/combination-sum-ii
저작권은 LeetCode 가 소유합니다. 상업적 재판의 경우 공식 승인에 문의하고 비상업적 재판의 경우 출처를 표시하십시오.

추천

출처blog.csdn.net/weixin_42120561/article/details/114270944