算法题: 给定一个字符串,里面用空格分开为6个或者更多的子单元,如:01 02 03 04 05 06 07 08... 写一函数,返回任6个进行组合的所有字符串。(java) 
public string[] ToSingle(string Number) //格式 01 02 03 04 05 06 07 

} 输出的字符串数组示例: 
01 02 03 04 05 06 
01 02 03 04 05 07 
01 02 03 05 06 07 
01 02 04 05 06 07 
01 03 04 05 06 07 
02 03 04 05 06 07 
...... 
有会做的请帮忙解答一下,加上注释,最好把思路写清楚,谢谢...

解决方案 »

  1.   

    .....java算法,好像是问错地方了
      

  2.   

    import java.util.ArrayList;
    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Set;
    import java.util.StringTokenizer;public class TestString { /**
     * 算法题: 给定一个字符串,里面用空格分开为6个或者更多的子单元,
     * 如:01 02 03 04 05 06 07 08... 写一函数,
     * 返回任6个进行组合的所有字符串。
     * 输出的字符串数组示例: 
    01 02 03 04 05 06 
    01 02 03 04 05 07 
    01 02 03 05 06 07 
    01 02 04 05 06 07 
    01 03 04 05 06 07 
    02 03 04 05 06 07 
     */
    private static int a[][];
    private final int COUNT=6;//单元个数
    private int n=0;
    private Set set=new HashSet();
    private List<String> list=new ArrayList<String>();
    public  static void main(String[] args) {
    String number="01 02 03 04 05 06 07 08 09 10";
    TestString ts=new TestString();
    ts.ToSingle(number);
    //ToSingle(number);
    }
    public  void ToSingle(String number)

    number=number+" ";
    StringTokenizer tokenizer=new StringTokenizer(number," ");
    while(tokenizer.hasMoreTokens())
    {
    String str=tokenizer.nextToken();
    list.add(str);
    }
    n=list.size();
    //构造一个有向图
    a = new int[n][n];
    for(int i=0;i<n;i++)
    {
    for(int j=0;j<n;j++)
    {
    if(i<j)
    {
    a[i][j]=1;
    }else{
    a[i][j]=0;
    }
    System.out.print(a[i][j]);
    }
    System.out.println();
    }

    for (int i =0;i<n-5; i++) 

    depthFirstSearch(i,"",0); 
    System.out.println(i);
    }  //打印结果. 
    Iterator it = set.iterator(); 
    while (it.hasNext())

    String str= (String) it.next(); 
    System.out.println(str);  } 
    System.out.println("一共有:"+set.size()+"个组合");

    /*******图的深度遍历算法*******/
    private  void depthFirstSearch(int startIndex,String result,int count) { 
    result =result.trim() +" "+ list.get(startIndex);
    count++;
    if (count==6) { 
    //如果字符串长度等于COUNT*3-1则添加到set
    set.add(result); 

    for(int j=startIndex;j<n; j++){ 
    if (a[startIndex][j]==1)

       depthFirstSearch(j,result,count); 
    } else { 
      continue; 

    }
    result = result.substring(0,result.length()-1); 
    }
    }