比如:
char a={'A','B','C'},要求输出结果为:
A,B,C,AB,AC,BC,ABC注:AB和BA属于同一个,对顺序无要求.希望大家帮帮忙想一下,我想了好久想不出来,如果大家用递归,最好能够讲一下,因为俺对递归反应很迟钝,谢谢!
char a={'A','B','C'},要求输出结果为:
A,B,C,AB,AC,BC,ABC注:AB和BA属于同一个,对顺序无要求.希望大家帮帮忙想一下,我想了好久想不出来,如果大家用递归,最好能够讲一下,因为俺对递归反应很迟钝,谢谢!
在百度没搜着,如果CSDN有的话百度应该可以搜到
void combine(String str){
int length=str.length();
char[] in=str.toCharArray();
StringBuffer out=new StringBuffer(); allCombine(in,out,length,0,0);
}
void allCombine(char[] in,StringBuffer out,int length,int sign,int start){
for(int i=start;i<length;i++){
out.append(in[i]);
System.out.println(out);
if(i<length-1){
allCombine(in,out,length,sign+1,i+1);
}
out.setLength(out.length()-1);
}
}向输出字符串中的当前位置添加一个字符
剩下的字符继续这样操作
char[] in = str.toCharArray();
StringBuffer out = new StringBuffer();
allCombine(in, out, 0);
}void allCombine(char[] in, StringBuffer out, int start) {
for (int i = start; i < in.length; i++) {
out.append(in[i]);
System.out.println(out);
if (i < in.length - 1) {
allCombine(in, out, i + 1);
}
out.setLength(out.length() - 1);
}
}这样楼主能更好理解了
import java.util.*;
import java.io.*;
public class TestT{
public static void main(String[] args)throws Exception{
String [] array=new String[]{"A","B","C","D"};
listAll(Arrays.asList(array),"");}public static void listAll(List candidate,String prefix){
System.out.println(prefix);
for(int i=0;i<candidate.size();i++){
List temp =new LinkedList(candidate);
listAll(temp,prefix+temp.remove(i));
}
}
}
我知道是把out清空,然后再重新开始,但是还是有点转不过弯来~