在C中,如何打印字符串的所有组合?
例如:如果字符串是“ABC”,那么可能的组合是A,B,C,AB,AC,BC,ABC。
我需要在控制台中打印所有可能的“ABC”组合。
答案 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的所有组合。