【问题标题】:How to build combination function in java?如何在java中构建组合功能?
【发布时间】:2013-06-06 21:56:45
【问题描述】:

我正在研究面试题。

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

我想构建组合功能。

例如,如果输入是[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]

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

有人可以给出一些想法或例子吗?

谢谢

【问题讨论】:

  • 这不是permutation 方法而不是combination 吗?
  • @splunebob 我说“排列”?我不太确定.. 但每个案例都应该有相同的长度。它不接受 [1] ,[2,3] .. 等情况..

标签: java arrays combinations permutation


【解决方案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;
        }
     }
   }

}

【讨论】:

  • 感谢赛利格。它真的帮助我理解面试问题。我会努力改进功能:)谢谢!!
猜你喜欢
  • 2011-05-07
  • 2020-08-17
  • 1970-01-01
  • 1970-01-01
  • 2016-11-14
  • 2016-06-27
  • 2021-08-17
  • 1970-01-01
  • 2012-03-21
相关资源
最近更新 更多