static boolean findNumSetBySum(int[] arr, int sum) {
int[] result = new int[100];
boolean done = false;
System.out.println("find set of num whose sum is a given num : " + sum);
done= findNumSetBySum(arr, result, sum, 0, 0, false);
return done;
}
static boolean findNumSetBySum(int[] arr, int[] result, int sum, int index, int i, boolean done) {
if (sum == 0) {
done = true;
int j = 0;
int n = 0;
while (j < i) {
if (result[j] != 0) {
System.out.print(result[j] + " , ");
}
j++;
}
System.out.println();
return true;
}
if (done != true)
{
if ((sum > 0 && index == arr.length) || (sum < 0)) {
return false;
}
if (sum > 0 && index < arr.length) {
findNumSetBySum(arr, result, sum, index + 1, i, false);
if (sum >= arr[index]) {
result[i] = arr[index];
findNumSetBySum(arr, result, sum - arr[index], index + 1, i + 1, false);
}
}
// return false;
}
return false;
}
int[] result = new int[100];
boolean done = false;
System.out.println("find set of num whose sum is a given num : " + sum);
done= findNumSetBySum(arr, result, sum, 0, 0, false);
return done;
}
static boolean findNumSetBySum(int[] arr, int[] result, int sum, int index, int i, boolean done) {
if (sum == 0) {
done = true;
int j = 0;
int n = 0;
while (j < i) {
if (result[j] != 0) {
System.out.print(result[j] + " , ");
}
j++;
}
System.out.println();
return true;
}
if (done != true)
{
if ((sum > 0 && index == arr.length) || (sum < 0)) {
return false;
}
if (sum > 0 && index < arr.length) {
findNumSetBySum(arr, result, sum, index + 1, i, false);
if (sum >= arr[index]) {
result[i] = arr[index];
findNumSetBySum(arr, result, sum - arr[index], index + 1, i + 1, false);
}
}
// return false;
}
return false;
}
No comments:
Post a Comment