# Combinations in a String of Digits

• Difficulty Level : Medium
• Last Updated : 06 May, 2021

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 ```

The problem can be solved using recursion. We keep track of the current index in the given input string and the length of the 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 the current digit to output. From here make two calls, one considering the next digit as part of the next number(including a space in output string) and one considering the next digit as part of the current number( no space included). If there are no digits remaining after the 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``;` `    ``// initialize output with empty string``    ``output = ``'\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`

## Python3

 `# Python3 program to find all combination of numbers``# from a given string of digits` `# function to print combinations of numbers``# in given input string``def` `printCombinations(``input``, index, output, outLength):``    ` `    ``# no more digits left in input string``    ``if` `(``len``(``input``) ``=``=` `index):``        ` `        ``# print output string & return``        ``output[outLength] ``=` `'\0'``        ``print``(``*``output[:outLength], sep ``=` `"")``        ``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``(``len``(``input``) !``=` `(index ``+` `1``)):``        ``printCombinations(``input``, index ``+` `1``,``                          ``output, outLength ``+` `1``)` `# Driver code``input` `=` `"1214"``output ``=` `[``0``]``*``100` `# initialize output with empty string``output[``0``] ``=` `'\0'` `printCombinations(``input``, ``0``, output, ``0``)` `# This code is contributed by SHUBHAMSINGH10`

## 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``;``    ` `    ``printCombinations(input, 0, output, 0);``}``}` `// This code is contributed by 29AjayKumar`

## Javascript

 ``

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`

## Python3

 `# Python 3 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` `# Function to print combinations of``# numbers in given input string``def` `printCombinations(s):``    ` `    ``# find length of char array``    ``l ``=` `len``(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` `i ``in` `range``(``pow``(``2``, l ``-` `1``)):``        ``k ``=` `i``        ``x ``=` `0``        ` `        ``# first character will``        ``# be printed as well``        ``print``(s[x], end ``=` `"")``        ``x ``+``=` `1``        ` `        ``for` `j ``in` `range``(``len``(s) ``-` `1``):``            ` `            ``# if bit is set, means``            ``# provide space``            ``if``(k & ``1``):``                ``print``(``" "``, end ``=` `"")``            ``k ``=` `k >> ``1``            ``print``(s[x], end ``=` `"")``            ` `            ``# always increment index of``            ``# input string``            ``x ``+``=` `1``        ` `        ``print``()` `# Driver code``if` `__name__ ``=``=` `"__main__"``:` `    ``inp ``=` `"1214"``;``    ``printCombinations(inp);` `# This code is contributed by Chitranayal`

## 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`

## Javascript

 ``

Output:

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