Search code examples
javastringrecursionrecursive-backtracking

Print all possible combinations of r elements using string


enter image description here

I was trying to solve this question using this simple recursive and backtracking approach.My idea was this:

code

import java.util.*;

public class Main
{

    static void generate(String s, String ans , int r)
    {
        if(ans.length()-1==r)
        {
            System.out.print(ans);

            return;
        }

        char ch=s.charAt(0);

        for(int i=1;i<=s.length()-1;i++)
        {
            String ros=s.substring(i);

            generate(ros,ans+ch,r);
        }
    }

    public static void main(String[] args) {
        String a="123";
        Scanner sc=new Scanner(System.in);
        int r=sc.nextInt();
        String ans=" ";
        generate(a,ans,r);
    }
}

my output with string 123 : 12

Required output : 12 13 23

I hope my recursive tree is right but I am not able to code it. My code seems to have some major issues


Solution

  • Here is different code using ArrayList but using same logic as **Nathan Drake** :
    
    import java.util.*;
    
    public class Main
    
    {
    
        public static void PrintAllCombinations(int[] arr, int r) {
    List<Integer> list = new ArrayList<Integer>();
    PrintAllCombinationsUtils(arr, r, list, 0);
    }
    
    private static void PrintAllCombinationsUtils(int[] arr, int r, List<Integer> list, int start) {
    
    if (list.size() >= r) {
    
    System.out.println(list);
    
    return;
    
    }
    
    for (int i = start; i < arr.length; i++) {
    
    list.add(arr[i]);
    
    PrintAllCombinationsUtils(arr, r, list, i + 1);
    
    list.remove(list.size() - 1);
    
    }
    
    }
    
        public static void main(String[] args){
    
            Scanner sc=new Scanner(System.in);
    
            int r=sc.nextInt();
    
            int arr[]=new int[5];
    
            for(int i=0;i<arr.length;i++)
    
            {
                arr[i]=sc.nextInt();
    
            }
    
            PrintAllCombinations( arr, r);
    
        }
    }