📜  一串数字的组合

📅  最后修改于: 2021-04-23 17:31:05             🧑  作者: Mango

给定一个数字输入字符串,找到可以使用数字以相同顺序形成的所有数字组合。
例子:

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 

可以使用递归来解决该问题。到目前为止,我们一直跟踪给定输入字符串中的当前索引以及输出字符串的长度。在每次调用该函数,如果输入字符串中没有剩余数字,请打印当前输出字符串并返回。否则,将当前数字复制到输出。从这里进行两次呼叫,一个呼叫将下一位数字作为下一个数字的一部分(包括输出字符串),一个呼叫将下一位数字作为当前数字的一部分(不包括空格)。如果在当前数字之后没有剩余数字,则将省略对函数的第二次调用,因为尾部空格不会算作新的组合。

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


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


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


输出:

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


替代解决方案:

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

输出:

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