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 

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.

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to find all combination of numbers 
// from a given string of digits
#include <iostream>
#include <cstring>
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;
}

chevron_right


Output:

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

Alternative Solution:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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 <bits/stdc++.h>
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

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


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

This article is contributed by aditi sharma 2. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



My Personal Notes arrow_drop_up



Article Tags :
Practice Tags :


Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.