# Combinations in a String of Digits

Given an input string of numbers, find all combinations of numbers that can be formed using digits in the same order.

Examples:

```Input : 123
Output :1 2 3
1 23
12 3
123

Input : 1234
Output : 1 2 3 4
1 2 34
1 23 4
1 234
12 3 4
12 34
123 4
1234
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

The problem can be solved using recursion. We keep track of current index in given input string and length of output string so far. In each call to the function, if there are no digits remaining in the input string print the current output string and return. Otherwise, copy current digit to output. From here make two calls, one considering next digit as part of next number(including a space in output string) and one considering next digit as part of current number( no space included). If there are no digits remaining after current digit the second call to the function is omitted because a trailing space doesn’t count as a new combination.

## C++

 `// CPP program to find all combination of numbers  ` `// from a given string of digits ` `#include ` `#include ` `using` `namespace` `std; ` ` `  `// function to print combinations of numbers  ` `// in given input string ` `void` `printCombinations(``char``* input, ``int` `index,  ` `                     ``char``* output, ``int` `outLength) ` `{ ` `    ``// no more digits left in input string ` `    ``if` `(input[index] == ``'\0'``) ` `    ``{ ` `        ``// print output string & return ` `        ``output[outLength] = ``'\0'``; ` `        ``cout << output << endl; ` `        ``return``; ` `    ``} ` `     `  `    ``// place current digit in input string ` `    ``output[outLength] = input[index]; ` `     `  `    ``// separate next digit with a space ` `    ``output[outLength + 1] = ``' '``; ` `     `  `    ``printCombinations(input, index + 1, output,  ` `                                   ``outLength + 2); ` `     `  `    ``// if next digit exists make a  ` `    ``// call without including space ` `    ``if``(input[index + 1] != ``'\0'``) ` `    ``printCombinations(input, index + 1, output,  ` `                                    ``outLength + 1); ` `     `  `} ` ` `  `// driver function to test above function ` `int` `main() ` `{ ` `    ``char` `input[] = ``"1214"``; ` `    ``char` `*output = ``new` `char``[100]; ` ` `  `    ``// initialize output with empty string ` `    ``output[0] = ``'\0'``; ` `     `  `    ``printCombinations(input, 0, output, 0); ` `    ``return` `0; ` `} `

## Java

 `// Java program to find all combinations ` `// of numbers from a given string of digits ` `class` `GFG ` `{ ` `     `  `// function to print combinations of numbers  ` `// in given input string ` `static` `void` `printCombinations(``char``[] input, ` `                              ``int` `index,  ` `                              ``char``[] output,  ` `                              ``int` `outLength) ` `{ ` `    ``// no more digits left in input string ` `    ``if` `(input.length == index) ` `    ``{ ` `        ``// print output string & return ` `        ``System.out.println(String.valueOf(output)); ` `        ``return``; ` `    ``} ` `     `  `    ``// place current digit in input string ` `    ``output[outLength] = input[index]; ` `     `  `    ``// separate next digit with a space ` `    ``output[outLength + ``1``] = ``' '``; ` `     `  `    ``printCombinations(input, index + ``1``, output,  ` `                                ``outLength + ``2``); ` `     `  `    ``// if next digit exists make a  ` `    ``// call without including space ` `    ``if``(input.length!=index + ``1``) ` `    ``printCombinations(input, index + ``1``, output,  ` `                                ``outLength + ``1``); ` `} ` ` `  `// Driver Code ` `public` `static` `void` `main(String[] args)  ` `{ ` `    ``char` `input[] = ``"1214"``.toCharArray(); ` `    ``char` `[]output = ``new` `char``[``100``]; ` `     `  `    ``printCombinations(input, ``0``, output, ``0``); ` `} ` `} ` ` `  `// This code is contributed by Rajput-Ji `

## C#

 `// C# program to find all combinations ` `// of numbers from a given string of digits ` `using` `System; ` `     `  `class` `GFG ` `{ ` `     `  `// function to print combinations of numbers  ` `// in given input string ` `static` `void` `printCombinations(``char``[] input, ` `                              ``int` `index,  ` `                              ``char``[] output,  ` `                              ``int` `outLength) ` `{ ` `    ``// no more digits left in input string ` `    ``if` `(input.Length == index) ` `    ``{ ` `        ``// print output string & return ` `        ``Console.WriteLine(String.Join(``""``,  ` `                                ``output)); ` `        ``return``; ` `    ``} ` `     `  `    ``// place current digit in input string ` `    ``output[outLength] = input[index]; ` `     `  `    ``// separate next digit with a space ` `    ``output[outLength + 1] = ``' '``; ` `     `  `    ``printCombinations(input, index + 1, output,  ` `                                ``outLength + 2); ` `     `  `    ``// if next digit exists make a  ` `    ``// call without including space ` `    ``if``(input.Length!=index + 1) ` `    ``printCombinations(input, index + 1, output,  ` `                                ``outLength + 1); ` `} ` ` `  `// Driver Code ` `public` `static` `void` `Main(String[] args)  ` `{ ` `    ``char` `[]input = ``"1214"``.ToCharArray(); ` `    ``char` `[]output = ``new` `char``[100]; ` `     `  `    ``printCombinations(input, 0, output, 0); ` `} ` `} ` ` `  `// This code is contributed by 29AjayKumar `

Output:

```1 2 1 4
1 2 14
1 21 4
1 214
12 1 4
12 14
121 4
1214
```

Alternative Solution:

## C++

 `// CPP program to find all combination of ` `// numbers from a given string of digits ` `// using bit algorithm used same logic ` `// as to print power set of string ` `#include ` `using` `namespace` `std; ` ` `  `// function to print combinations of  ` `// numbers in given input string ` `void` `printCombinations(``char` `s[]){ ` `     `  `    ``// find length of char array ` `    ``int` `l = ``strlen``(s); ` ` `  `    ``// we can give space between characters  ` `    ``// ex. ('1' & '2') or ('2' & '3') or ` `    ``// ('3' & '4') or ('3' & '4') or all ` `    ``// that`s why here we have maximum  ` `    ``// space length - 1 ` `    ``for``(``int` `i = 0; i < ``pow``(2, l - 1); i++){ ` `        ``int` `k = i, x = 0; ` `         `  `        ``// first character will be printed ` `        ``// as well ` `        ``cout << s[x]; ` `        ``x++; ` `        ``for``(``int` `j = 0; j < ``strlen``(s) - 1; j++){ ` `             `  `            ``// if bit is set, means provide ` `            ``// space ` `            ``if``(k & 1) ` `                ``cout << ``" "``; ` `            ``k = k >> 1; ` `            ``cout << s[x]; ` `             `  `            ``// always increment index of  ` `            ``// input string ` `            ``x++; ` `        ``} ` `        ``cout << ``"\n"``; ` `    ``} ` `} ` ` `  `// driver code ` `int` `main() { ` ` `  `    ``char` `input[] = ``"1214"``; ` `    ``printCombinations(input); ` `     `  `    ``return` `0; ` `} ` `// This code is contributed by PRINCE Gupta 2 `

## Java

 `// Java program to find all combination of ` `// numbers from a given string of digits ` `// using bit algorithm used same logic ` `// as to print power set of string ` `import` `java.util.*; ` ` `  `class` `GFG ` `{ ` ` `  `// function to print combinations of  ` `// numbers in given input string ` `static` `void` `printCombinations(``char` `s[]) ` `{ ` `     `  `    ``// find length of char array ` `    ``int` `l = s.length; ` ` `  `    ``// we can give space between characters  ` `    ``// ex. ('1' & '2') or ('2' & '3') or ` `    ``// ('3' & '4') or ('3' & '4') or all ` `    ``// that`s why here we have maximum  ` `    ``// space length - 1 ` `    ``for``(``int` `i = ``0``;  ` `            ``i < Math.pow(``2``, l - ``1``); i++) ` `    ``{ ` `        ``int` `k = i, x = ``0``; ` `         `  `        ``// first character will be printed ` `        ``// as well ` `        ``System.out.print(s[x]); ` `        ``x++; ` `        ``for``(``int` `j = ``0``;  ` `                ``j < s.length - ``1``; j++) ` `        ``{ ` `             `  `            ``// if bit is set, means provide ` `            ``// space ` `            ``if``(k % ``2` `== ``1``) ` `                ``System.out.print(``" "``); ` `            ``k = k >> ``1``; ` `            ``System.out.print(s[x]); ` `             `  `            ``// always increment index of  ` `            ``// input string ` `            ``x++; ` `        ``} ` `        ``System.out.print(``"\n"``); ` `    ``} ` `} ` ` `  `// Driver Code ` `public` `static` `void` `main(String[] args)  ` `{ ` `    ``char` `input[] = ``"1214"``.toCharArray(); ` `    ``printCombinations(input); ` `} ` `} ` ` `  `// This code is contributed by PrinciRaj1992  `

## C#

 `// C# program to find all combination of ` `// numbers from a given string of digits ` `// using bit algorithm used same logic ` `// as to print power set of string ` `using` `System; ` `     `  `class` `GFG ` `{ ` ` `  `// function to print combinations of  ` `// numbers in given input string ` `static` `void` `printCombinations(``char` `[]s) ` `{ ` `     `  `    ``// find length of char array ` `    ``int` `l = s.Length; ` ` `  `    ``// we can give space between characters  ` `    ``// ex. ('1' & '2') or ('2' & '3') or ` `    ``// ('3' & '4') or ('3' & '4') or all ` `    ``// that`s why here we have maximum  ` `    ``// space length - 1 ` `    ``for``(``int` `i = 0;  ` `            ``i < Math.Pow(2, l - 1); i++) ` `    ``{ ` `        ``int` `k = i, x = 0; ` `         `  `        ``// first character will be printed ` `        ``// as well ` `        ``Console.Write(s[x]); ` `        ``x++; ` `        ``for``(``int` `j = 0;  ` `                ``j < s.Length - 1; j++) ` `        ``{ ` `             `  `            ``// if bit is set, means provide ` `            ``// space ` `            ``if``(k % 2 == 1) ` `                ``Console.Write(``" "``); ` `            ``k = k >> 1; ` `            ``Console.Write(s[x]); ` `             `  `            ``// always increment index of  ` `            ``// input string ` `            ``x++; ` `        ``} ` `        ``Console.Write(``"\n"``); ` `    ``} ` `} ` ` `  `// Driver Code ` `public` `static` `void` `Main(String[] args)  ` `{ ` `    ``char` `[]input = ``"1214"``.ToCharArray(); ` `    ``printCombinations(input); ` `} ` `} ` ` `  `// This code is contributed by Rajput-Ji `

Output:

```1214
1 214
12 14
1 2 14
121 4
1 21 4
12 1 4
1 2 1 4
```