如何在java中构建组合函数?

时间:2013-06-06 21:56:45

标签: java arrays combinations permutation

我正在研究面试问题。

而且,我很难理解组合功能。

我想构建组合函数。

例如,如果输入为[1,2,3] 然后我必须生成[1,2,3] , [1, 3, 2 ] , [2, 1 ,3 ] , [ 2, 3, 1] , [ 3, 1, 2 ] , [ 3, 2 ,1]

但是,它不应该接受长度比输入值短的情况。 (例如,[1][3,2]

并且,输入中的元素数量可以更改([1,2,3,4][1,2,3,4,5 ,6]

但是,我不确定如何开始构建此功能。

有人可以提供一些想法或示例吗?

谢谢

1 个答案:

答案 0 :(得分:1)

正如已经指出的那样,你似乎是permutation而不是combination

我头脑中的第一种方法是递归方法 - 但我不确定它会有多高效 - 也许是一个有趣的问题要考虑你的面试问题!

public class Permutations {

   // testing
   public static void main(String[] args){        
    permutations(new int[]{1,2,3});    
   }

   public static void permutations(int[] array){
     boolean[] chosen = new boolean[array.length];
     int[] output = new int[array.length];
     permutation_inner(array,chosen,output,0);
   }
   public static void permutation_inner(int[] array, boolean[] chosen, 
                                        int[] output, int depth){
     if(depth==array.length){
       System.out.println(java.util.Arrays.toString(output));
       return;
     }
     for(int i=0;i<array.length;i++){
        if(!chosen[i]){
           chosen[i]=true;
           output[depth]=array[i];
           permutation_inner(array,chosen,output,depth+1);
           chosen[i]=false;
        }
     }
   }

}