1、思路概述:
用回溯算法打印123的所有子集,打印出来即为1,12,13,123,2,23,3。
所以当遇到这种要求子集的问题时,我们首先想到的就是回溯算法的子集树思想。
static int [] brr;
public static void backstrace(int [] array,int i){
if(i==array.length){ for (int j = 0; j < i; j++) {
if(brr[j]==1)
System.out.print(array[j]);
}
System.out.println();
}else{
brr[i]=1;
backstrace(array,i+1);
brr[i]=0;
backstrace(array,i+1);
}
}
public static void main(String[] args) {
int [] array={1,2,3};
brr=new int[array.length];
backstrace(array,0);
}
可看到应用到递归的两句
brr[i]=1;
backstrace(array,i+1);
brr[i]=0;
backstrace(array,i+1);
当辅助数组brr[i]=1的时候,表示往左边走 brr[i]=0表示往右边走,打印所有往左边走的数;
我们可以把他想像成一个树结构(此树结构是不存在的,是想像理解出来的),如下图所示
则当选择了所有辅助数组的值为1的数字进行打印的时候,就可以得出123的所有子集