mirror of https://github.com/evanferrao/dsa
add combinations
This commit is contained in:
parent
2440656782
commit
ea6b3076c3
|
|
@ -0,0 +1,73 @@
|
|||
// https://leetcode.com/problems/combination-sum/
|
||||
|
||||
import java.util.*;
|
||||
|
||||
class CombinationOne {
|
||||
|
||||
public static void findCombination(int currentIndex, List<Integer> ds, int candidates[], int n, int target, List<List<Integer>> finalAnswer){
|
||||
|
||||
if (currentIndex == n){
|
||||
if(target == 0){
|
||||
finalAnswer.add(new ArrayList<>(ds));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (candidates[currentIndex] <= target){
|
||||
ds.add(candidates[currentIndex]);
|
||||
|
||||
// Reuse same element
|
||||
findCombination(currentIndex, ds, candidates, n, target - candidates[currentIndex], finalAnswer);
|
||||
|
||||
ds.remove(ds.size() - 1);
|
||||
}
|
||||
|
||||
// Move to next index
|
||||
findCombination(currentIndex + 1, ds, candidates, n, target, finalAnswer);
|
||||
}
|
||||
|
||||
public List<List<Integer>> combinationSum(int[] candidates, int target) {
|
||||
|
||||
int n = candidates.length;
|
||||
|
||||
List<List<Integer>> finalAnswer = new ArrayList<>();
|
||||
List<Integer> ds = new ArrayList<>();
|
||||
|
||||
findCombination(0, ds, candidates, n, target, finalAnswer);
|
||||
|
||||
return finalAnswer;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public class Main {
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
Scanner sc = new Scanner(System.in);
|
||||
|
||||
System.out.print("Enter number of elements: ");
|
||||
int n = sc.nextInt();
|
||||
|
||||
int[] candidates = new int[n];
|
||||
|
||||
System.out.println("Enter elements:");
|
||||
for(int i = 0; i < n; i++){
|
||||
candidates[i] = sc.nextInt();
|
||||
}
|
||||
|
||||
System.out.print("Enter target: ");
|
||||
int target = sc.nextInt();
|
||||
|
||||
Solution obj = new Solution();
|
||||
|
||||
List<List<Integer>> result = obj.combinationSum(candidates, target);
|
||||
|
||||
System.out.println("Possible combinations are:");
|
||||
for(List<Integer> list : result){
|
||||
System.out.println(list);
|
||||
}
|
||||
|
||||
sc.close();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,70 @@
|
|||
// https://leetcode.com/problems/combination-sum-ii/
|
||||
import java.util.*;
|
||||
|
||||
class CombinationTwo {
|
||||
|
||||
public static void findCombination(int currentIndex, List<Integer> ds, int candidates[], int target, List<List<Integer>> finalAnswer){
|
||||
|
||||
if (target == 0){
|
||||
finalAnswer.add(new ArrayList<>(ds));
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = currentIndex; i < candidates.length; i++){
|
||||
|
||||
if (i > currentIndex && candidates[i] == candidates[i-1]) continue;
|
||||
|
||||
if (candidates[i] > target) break;
|
||||
|
||||
ds.add(candidates[i]);
|
||||
|
||||
findCombination(i + 1, ds, candidates, target - candidates[i], finalAnswer);
|
||||
|
||||
ds.remove(ds.size() - 1);
|
||||
}
|
||||
}
|
||||
|
||||
public List<List<Integer>> combinationSum2(int[] candidates, int target) {
|
||||
|
||||
Arrays.sort(candidates);
|
||||
|
||||
List<List<Integer>> finalAnswer = new ArrayList<>();
|
||||
List<Integer> ds = new ArrayList<>();
|
||||
|
||||
findCombination(0, ds, candidates, target, finalAnswer);
|
||||
|
||||
return finalAnswer;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
|
||||
Scanner sc = new Scanner(System.in);
|
||||
|
||||
System.out.print("Enter number of elements: ");
|
||||
int n = sc.nextInt();
|
||||
|
||||
int[] candidates = new int[n];
|
||||
|
||||
System.out.println("Enter elements:");
|
||||
for(int i = 0; i < n; i++){
|
||||
candidates[i] = sc.nextInt();
|
||||
}
|
||||
|
||||
System.out.print("Enter target: ");
|
||||
int target = sc.nextInt();
|
||||
|
||||
Solution obj = new Solution();
|
||||
|
||||
List<List<Integer>> result = obj.combinationSum2(candidates, target);
|
||||
|
||||
System.out.println("Unique combinations are:");
|
||||
for(List<Integer> list : result){
|
||||
System.out.println(list);
|
||||
}
|
||||
|
||||
sc.close();
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue