现在有一个数据,里面有n列m行,每列数据个数已知,但每列数据个数不相等。现想从每列中各取一个数据,进行排列组合,要求覆盖所有组合,即 n x m种组合。将每种组合输出多谢高手指教!!谢谢!!!!

解决方案 »

  1.   

    //我的一个很简单的递归算法,很简单哦
    //千万别忘记给我加分哦^-^public class Suan{
      private int[][] data={{1,4},{2,3,4},{5,7}};
      private int m;
      private int[] tp;
      Suan(){
            m=data.length;
            tp=new int[m];
            process(-1);    
        }
        void process(int i){
            if (i==(m-1)){
                for(int j=0;j<m;j++)    System.out.print(tp[j]+" ");
                System.out.println();
                return;
            } 

            for(int j=0;j<data[i+1].length;j++){
                tp[i+1]=data[i+1][j];
                process(i+1);
            }
        }

        public static void main(String [] args){
            new Suan();
        }
    }
      

  2.   

    xdyangyan () 你的问题已经解决,也该结帖了吧!
    (这个贴,怎么这么冷清,自己要多顶哦)
      

  3.   

    根据传入的数组,返回一维数组,就是可能的排列组合。从传入的数组,依次抽取其中元素,并把剩下的其他元素作为参数new成一个新类,把新类的组合结果累加。
    package steeven;
    import java.util.ArrayList;public class Test {
      public java.util.ArrayList r;
      public Test(ArrayList in) {
        r = new ArrayList();
        if (in.size()==1)
          r.add(in.get(0));
        for (int i=0;i<in.size();i++){
          ArrayList sub = (ArrayList)in.clone();
          String s = (String)sub.remove(i);
          Test other = new Test(sub);
          for (int j=0;j<other.r.size();j++)
            r.add(s+(String)other.r.get(j));
        }
      }
      public static void main(String[] args) {
        ArrayList a = new ArrayList();
        a.add("a");
        a.add("b");
        a.add("c");
        a.add("d");
        Test test = new Test(a);
        for (int i=0;i<test.r.size();i++)
          if ((i+1)%(a.size()-1)==0)
            System.out.println(test.r.get(i).toString());
          else
            System.out.print(test.r.get(i).toString()+",");
      }
    }