算法题: 给定一个字符串,里面用空格分开为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.   


    public static void main(String[] args) {
    // 5选3
    char[] arr = {'A','B','C','D','E'};
    select(arr, 3);
    }

    public static void select(char[] arr, int k) {
    select(arr, 0, 1, new char[k], k);
    } private static void select(char[] arr, int head, int index, char[] tmp, int k) {
    for (int i = head; i < arr.length + index - k; i++) {
    if(index > k)
    return;

    tmp[index - 1] = arr[i];
    if(index == k)
    System.out.print(String.valueOf(tmp) + "  ");
    select(arr, i + 1, index + 1, tmp, k);
    }
    }
    给你一个参考
      

  2.   

    .net有人说很难,而我们java的做的这么简单,厉害,4楼的可以解释一下不,加一下注释,谢谢了
      

  3.   

    四楼的答案有问题 ABC  ABD  ABE  ACD  ACE  ADE  BCD  BCE  BDE  CDE  
    只能按A在一定在前E一定在后的原则  那么 BCA。呢?
      

  4.   

    public static List<String> arrange(String str){
         List<String> result = new LinkedList<String>();
         if(str.length() == 1){
         result.add(str);
         return result;
         }else {
        
         for(int i =0 ;i<str.length();i++){
         String strI = str.substring(i,i+1);
         String strLeft = str.substring(0,i);
         String strRight = str.substring(i+1,str.length());
      
         List<String> newStr = arrange(strLeft+strRight);
        
         List<String> newResultList = new LinkedList<String>();
         for(int j =0;j<newStr.size();j++){
           
         newResultList.add(strI+newStr.get(j));
         }
         result.addAll(newResultList);
         }
    return result;
    }
        }你传进去一个、字符串,例如"abc",会给出你想要的结果!这个思路主要是递归,因为你字符串长度可能为N
      

  5.   


    public class ArrayStringSort {
    public static void main(String[] args){
    String arr;
    String str = " 01 02 03 04 05 06 07";
    StringBuffer sb = new StringBuffer(str);

    for(int i = sb.length()-3;i >= 0;i -=3){
    arr = sb.substring(i,i + 3);
    sb.delete(i,i + 3);
    System.out.println(sb);
    sb.insert(i,arr);
    }
    }
    }
      

  6.   


    这道题似乎是求组合而非排列吧楼主想要注释,去Google上搜吧,求组合的算法很多,本人表达能力有限,解释不好