publicclass Solution {private List<List<Integer>> resultList = new ArrayList<List<Integer>>();privateint[] nums=null;public List<List<Integer>> combinationSum2(int[] candidates, int target) {resultList.clear();Arrays.sort(candidates);nums = newint[candidates.length];visit(candidates,target,0);return resultList;}privatevoidvisit(int[] candidates, int target,int idx){if(target==0){List<Integer> result = new ArrayList<Integer>();for(int i=0;i<nums.length;i++){if(nums[i]>0){result.add(candidates[i]);}}resultList.add(result);return;}if(target<0 || idx>=candidates.length){return;}if(idx>0 && candidates[idx]==candidates[idx-1] && nums[idx-1]==0 ){//不選擇當前數據nums[idx]=0;visit(candidates,target,idx+1);}else{//選擇當前數據nums[idx]++;visit(candidates,target-candidates[idx],idx+1);//不選擇當前數據nums[idx]--;visit(candidates,target,idx+1);}}
}
216 Combination Sum III
從1-9中找到k個數,這k個數的和是target。輸出這k個數的組合,組合不能重復。 例如 輸入k=3,target=7,則輸出 [[1,2,4]] 思路:題中沒有明確說明,但從例子來看,每個數字只能使用一次。這和40題類似。一個數組長度為10,里面存的是boolean類型。path[i]=true,表示i被選中。 數組下標 0 1 2 3 4 5 6 7 8 9 值 f t t t f f f f f f =1+2+3
publicclassSolution {privateboolean[] path;private List<List<Integer>> resultList = new ArrayList<List<Integer>>();public List<List<Integer>> combinationSum3(int k, int n) {path = newboolean[10];resultList.clear();robot(1,k,n);return resultList;}privatevoidrobot(int idx,int k,int n){if(n==0 && k==0){List<Integer> result = new ArrayList<Integer>();for(int i=0;i<path.length;i++){if(path[i]){result.add(i);}}resultList.add(result);}if(n>0 && idx<path.length && idx<=n && k>0){path[idx]=true;robot(idx+1,k-1,n-idx);path[idx]=false;robot(idx+1,k,n);}}
}
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎