下面的代码会给出你想要的结果:
(它是用Java编写的,如果需要帮助将其翻译成C语言,请注释掉)
结果:
hey hey hey
hey hey hi
hey hey hello
hey hey
hey hi hey
hey hi hi
hey hi hello
hey hi
hey hello hey
hey hello hi
hey hello hello
hey hello
hey
hi hey hey
hi hey hi
hi hey hello
hi hey
hi hi hey
hi hi hi
hi hi hello
hi hi
hi hello hey
hi hello hi
hi hello hello
hi hello
hi
hello hey hey
hello hey hi
hello hey hello
hello hey
hello hi hey
hello hi hi
hello hi hello
hello hi
hello hello hey
hello hello hi
hello hello hello
hello hello
hello
使用的递归“算法”:
public static void alg (ArrayList<String[]> result, String list [], String [] left, int current_index){
if ( current_index == list.length ) {
return ;
}
for ( int i = 0; i < list.length ; i ++ ){
String [] new__list = concat(left, new String [] {list[i]});
alg (result, list, new__list, current_index+1);
result.add(new__list);
}
}
完整代码:
import java.util.ArrayList;
import java.util.Arrays;
public class Main {
//concatenate 2 string arrays
static String [] concat (String [] s1, String [] s2){
String [] result = new String [s1.length + s2.length];
for ( int i = 0 ; i < result.length ; i ++ ){
if ( i < s1.length){
result[i] = s1[i];
}else {
result[i] = s2 [i - s1.length];
}
}
return result;
}
//The algorithm
public static void alg (ArrayList<String[]> result, String list [], String [] left, int current_index){
if ( current_index == list.length ) {
return ;
}
for ( int i = 0; i < list.length ; i ++ ){
String [] new__list = concat(left, new String [] {list[i]});
alg (result, list, new__list, current_index+1);
result.add(new__list);
}
}
public static void main(String[] args) {
String [] list = {"hey", "hi", "hello"};
ArrayList <String[]> result = new ArrayList <String[]> () ;
alg (result, list, new String [] {}, 0);
//Print the result list
for ( int i = 0 ; i < result.size() ; i ++ ){
for (int j = 0 ; j < result.get(i).length ; j ++ ){
System.out.print(result.get(i)[j] + " ");
}
System.out.println();
}
}
}