作者TonyQ (骨头)
看板java
标题Re: [紧急]请问一下求子集合
时间Wed Mar 15 15:29:55 2006
※ 引述《[email protected] (在抉择的十字路)》之铭言:
: ※ 引述《ardidi (在抉择的十字路)》之铭言:
: 算了...这由我自己来解答好了
: 看的懂的就看吧
: 不过没有印出空集合
: public class set{
: public static void main(String[] args){
: int[] tmp1=new int[这里改成tmp阵列里的个数];
: int[] tmp={1,2,3,5};//<---这里自己改
: System.out.println("{}");
: set.work(tmp,0,tmp1,0);
: }
: public static void work(int[] tmp,int a,int[] tmp1,int b){
: while(a>=0){
: int c=0;
: if(a-1>=0){
: c=a-1;
: }
: if(tmp1[c]==tmp[tmp.length-1]){
: set.work(tmp,a-2,tmp1,1);
: }else{
: if(b==1){
: for(int i=0;i<tmp.length;i++){
: if(tmp1[a]==tmp[i]){
: tmp1[a]=tmp[i+1];
: break;
: }
: }
: }else{
: if(a-1<0){
: tmp1[a]=tmp[0];
: }else{
: for(int i=0;i<tmp.length;i++){
: if(tmp[i]==tmp1[a-1]){
: tmp1[a]=tmp[i+1];
: break;
: }
: }
: }
: }
: String str="";
: for(int i=0;i<a;i++){
: str+=tmp1[i]+",";
: }
: System.out.println("{"+str+tmp1[a]+"}");
: set.work(tmp,a+1,tmp1,0);
: }
: }
: }
: }
这问题刚好是我们最近的作业,(当然是已经交出去的作业XD)
收到的题目是将一个Set所有的子集合包括空集合都列出。(power_set问题)
我想了两个方式,一个是iterator 利用2进位的方式输出,
另一个是recursive,其实也是差不多的概念。XD
改成object是故意的,不过好像有点繁琐~:P
不过板上没有类似的文章,所以来贴一下,看看有没有人想讨论的...
Iterator版
static void power_set_iter(Object[] InputData){
boolean[] check=new boolean[InputData.length];
for(int back=InputData.length-1;back!=-1;){
for(int i=0;i<InputData.length;i++){
if(check[i]) System.out.print( InputData[i]);
}
System.out.println();
for(back=InputData.length-1;back>=0&&check[back];back--){
check[back]=false;
}
if(back!=-1) check[back]=true;
}
}
Recursive版
static void power_set(String step,Object[] input,int n)
{
if(n==input.length) System.out.println(step);
else{
power_set(step+input[n],input,n+1);
power_set(step,input,n+1);
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.138.240.58
1F:推 KanoLoa:递回版有问题...会漏掉一些子集QQ 10/01 13:02
2F:推 KanoLoa:不好意思 我刚带错参数,正确power_set(" ",字串阵列,0) ; 10/01 13:08