数据结构和算法数组系列---求数组的笛卡尔积

题目
有n个数组,每个数组中的元素个数不同,求这n个数组的所有排序组合。
比如,有3个数组,A(a1,a2,a3),B(b1,b2),C(c1,c2);则笛卡尔积为:a1b1c1,a1b1c2,a1b2c1,….

思路
设置一个数组count[n],对应n个数组,count[i]表示取第i个数组的第count]i]个元素;初始化count均为0,遍历每个数组,对于第i个数组,从该数组中取出第count[i]个元素;每次遍历时添加的元素极为一个排列;

算法实现


    private static LinkedList  combineArray(List nArray){
        int n=nArray.size();

        int[] count=new int[n];
        for(int i=0;icount[i]=0;
        }

        LinkedList result=new LinkedList();

        int flag=0;
        do{
            LinkedList list=new LinkedList();
            for(int i=0;icount[i]]);
            }
            result.add(list);

            //change the count array;
            flag=ChangeArrayCount(count,nArray);

        }while(flag!=1);

        return result;
    }


    private static int ChangeArrayCount(int[] count, List nArray) {
        for(int i=nArray.size()-1;i>=0;i--){
            if(count[i]==nArray.get(i).length-1){
                count[i]=0;
            }else{
                count[i]++;
                return 0;
            }
        }
        return 1;
    } 
  

                            
                        
                    
                    
                    

你可能感兴趣的:(面试,算法)