题目:把一个数组里的组合全部列出,例如1 2,列出为1,2,12,21
其实这个问题和我上一篇博文考察的思想是差不多的,不过这次不是列出所有的排列,只需列出所有的组合即可,于是我们可以套用上一篇博文的方法,不过我们可以改一改递归的终止条件,上一篇博文递归的终止条件是要把整个字符串输出,而我们现在只要保证输出的字符串不为空即可。
package programmer;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
public class ListAll {
public static void main(String[] args) {
String[] str = new String[] { "1", "2", "3", "4" };
listAll(Arrays.asList(str), "");
}
public static void listAll(List candidate, String prefix) {
if (!prefix.equalsIgnoreCase("")) //这儿体现了递归的出口
System.out.println(prefix);
for (int i = 0; i < candidate.size(); i++) {
List temp = new LinkedList(candidate);
listAll(temp, prefix + temp.remove(i));
}
}
}