打印字符串的组合

时间:2011-09-12 05:12:18

标签: c

在C中,如何打印字符串的所有组合?

例如:如果字符串是“ABC”,那么可能的组合是A,B,C,AB,AC,BC,ABC。

我需要在控制台中打印所有可能的“ABC”组合。

3 个答案:

答案 0 :(得分:8)

这是一个提示。将组合视为位编码。 E.g。

empty = 000 = 0

C = 001 = 1

B = 010 = 2

BC = 011 = 3

A = 100 = 4

AC = 101 = 5

AB = 110 = 6

ABC = 111 = 7

答案 1 :(得分:0)

使用递归,这个想法是这样的:

对于每个递归调用,字符串输入减少1个字符,结果字符串存储在tmp字符串数组中。例如:

致电1:abc

调用2:ab,最后一个char:c

致电3:a,最后一个字符:b

然后取最后一个char,并将其插入到tmp中所有可能位置的字符串列表中,例如:

tmp包含:a,最后一个字符:b

将b插入位置0和1,产生“ab”和“ba”

结果将回到输出列表,然后该过程继续。

伪代码大致是这样的:

get_perm (input):
    string[] tmp, out
    if input lengh == 1     //base case
        add input to tmp
        return tmp;

    tmp = get_permu (input[0 to input.length -1])
    char last_char = input[input.length - 1]
    //loop thru the string in tmp
    for string str in tmp:
        string tmp_str = str    //create a tmp copy
        int len = tmp_str.lengh //get the len
        //insert last_char to all possible position
        for j=0 to len:
            new_str = (add last_char to tmp_str in j position)
            out.add(new_str)

    return out

答案 2 :(得分:0)

您正在寻找的是一种回溯算法。

由于这是一个家庭作业,这是你应该开始的地方。 关于它的一般概念是将字母编码为整数,并使用3个字母生成长度为1的所有可能组合,然后生成长度为2的所有可能组合,然后生成长度为3的所有组合。