亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

關于各種排列組合java算法實現方法

2019-11-26 16:03:10
字體:
來源:轉載
供稿:網友

一.利用二進制狀態法求排列組合,此種方法比較容易懂,但是運行效率不高,小數據排列組合可以使用

復制代碼 代碼如下:

import java.util.Arrays;

//利用二進制算法進行全排列
//count1:170187
//count2:291656

public class test {
    public static void main(String[] args) {
        long start=System.currentTimeMillis();
        count2();
        long end=System.currentTimeMillis();
        System.out.println(end-start);
    }
    private static void count2(){
        int[] num=new int []{1,2,3,4,5,6,7,8,9};
        for(int i=1;i<Math.pow(9, 9);i++){
            String str=Integer.toString(i,9);
            int sz=str.length();
            for(int j=0;j<9-sz;j++){
                str="0"+str;
            }
            char[] temp=str.toCharArray();
            Arrays.sort(temp);
            String gl=new String(temp);
            if(!gl.equals("012345678")){
                continue;
            }
            String result="";
            for(int m=0;m<str.length();m++){
                result+=num[Integer.parseInt(str.charAt(m)+"")];
            }
            System.out.println(result);
        }
    }
    public static void count1(){
        int[] num=new int []{1,2,3,4,5,6,7,8,9};
        int[] ss=new int []{0,1,2,3,4,5,6,7,8};
        int[] temp=new int[9];
        while(temp[0]<9){
            temp[temp.length-1]++;
            for(int i=temp.length-1;i>0;i--){
                if(temp[i]==9){
                    temp[i]=0;
                    temp[i-1]++;
                }
            }
            int []tt=temp.clone();
            Arrays.sort(tt);
            if(!Arrays.equals(tt,ss)){
                continue;
            }
            String result="";
            for(int i=0;i<num.length;i++){
                result+=num[temp[i]];
            }
            System.out.println(result);

        }
    }
}


二.用遞歸的思想來求排列跟組合,代碼量比較大
復制代碼 代碼如下:

package practice;

import java.util.ArrayList;
import java.util.List;


public class Test1 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Object[] tmp={1,2,3,4,5,6};
//        ArrayList<Object[]> rs=RandomC(tmp);
        ArrayList<Object[]> rs=cmn(tmp,3);
        for(int i=0;i<rs.size();i++)
        {
//            System.out.print(i+"=");
            for(int j=0;j<rs.get(i).length;j++)
            {
                System.out.print(rs.get(i)[j]+",");
            }
            System.out.println();

        }
    }

   
    // 求一個數組的任意組合
    static ArrayList<Object[]> RandomC(Object[] source)
    {
        ArrayList<Object[]> result=new ArrayList<Object[]>();
        if(source.length==1)
        {
            result.add(source);       
        }
        else
        {
            Object[] psource=new Object[source.length-1];
            for(int i=0;i<psource.length;i++)
            {
                psource[i]=source[i];
            }
            result=RandomC(psource);
            int len=result.size();//fn組合的長度
            result.add((new Object[]{source[source.length-1]}));
            for(int i=0;i<len;i++)
            {
                Object[] tmp=new Object[result.get(i).length+1];
                for(int j=0;j<tmp.length-1;j++)
                {
                    tmp[j]=result.get(i)[j];
                }
                tmp[tmp.length-1]=source[source.length-1];
                result.add(tmp);
            }

        }
        return result;
    }

    static ArrayList<Object[]> cmn(Object[] source,int n)
    {
        ArrayList<Object[]> result=new ArrayList<Object[]>();
        if(n==1)
        {
            for(int i=0;i<source.length;i++)
            {
                result.add(new Object[]{source[i]});

            }
        }
        else if(source.length==n)
        {
            result.add(source);
        }
        else
        {
            Object[] psource=new Object[source.length-1];
            for(int i=0;i<psource.length;i++)
            {
                psource[i]=source[i];
            }
            result=cmn(psource,n);
            ArrayList<Object[]> tmp=cmn(psource,n-1);
            for(int i=0;i<tmp.size();i++)
            {
                Object[] rs=new Object[n];
                for(int j=0;j<n-1;j++)
                {
                    rs[j]=tmp.get(i)[j];
                }
                rs[n-1]=source[source.length-1];
                result.add(rs);
            }
        }
        return result;
    }

}


三.利用動態規劃的思想求排列和組合
復制代碼 代碼如下:

package Acm;
//強大的求組合數
public class MainApp {
    public static void main(String[] args) {
        int[] num=new int[]{1,2,3,4,5};
        String str="";
        //求3個數的組合個數
//        count(0,str,num,3);
//        求1-n個數的組合個數
        count1(0,str,num);
    }

    private static void count1(int i, String str, int[] num) {
        if(i==num.length){
            System.out.println(str);
            return;
        }
        count1(i+1,str,num);
        count1(i+1,str+num[i]+",",num);
    }

    private static void count(int i, String str, int[] num,int n) {
        if(n==0){
            System.out.println(str);
            return;
        }
        if(i==num.length){
            return;
        }
        count(i+1,str+num[i]+",",num,n-1);
        count(i+1,str,num,n);
    }
}


下面是求排列
復制代碼 代碼如下:

package Acm;
//求排列,求各種排列或組合后排列
import java.util.Arrays;
import java.util.Scanner;

public class Demo19 {
    private static boolean f[];
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int sz=sc.nextInt();
        for(int i=0;i<sz;i++){
            int sum=sc.nextInt();
            f=new boolean[sum];
            Arrays.fill(f, true);
            int[] num=new int[sum];
            for(int j=0;j<sum;j++){
                num[j]=j+1;
            }
            int nn=sc.nextInt();
            String str="";
            count(num,str,nn);
        }
    }
    /**
     *
     * @param num 表示要排列的數組
     * @param str 以排列好的字符串
     * @param nn  剩下需要排列的個數,如果需要全排列,則nn為數組長度
     */
    private static void count(int[] num, String str, int nn) {
        if(nn==0){
            System.out.println(str);
            return;
        }
        for(int i=0;i<num.length;i++){
            if(!f[i]){
                continue;
            }
            f[i]=false;
            count(num,str+num[i],nn-1);
            f[i]=true;
        }
    }
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品欧美一区二区三区| 国产精品十八以下禁看| 亚洲国产精品久久| 草民午夜欧美限制a级福利片| 欧美性20hd另类| 成人精品在线观看| 日本欧美国产在线| 国产裸体写真av一区二区| 日韩精品在线观看网站| 欧美二区乱c黑人| 色婷婷综合成人av| 亚洲欧美激情精品一区二区| 日韩av网址在线观看| 日韩亚洲成人av在线| 国产视频久久久久| 91精品国产综合久久香蕉最新版| 91高清免费视频| 欧美性xxxxxxxxx| 亚洲福利在线观看| 色噜噜狠狠色综合网图区| 国产一区二区三区在线看| 久久久www成人免费精品| 国产精品电影网站| 欧美成人午夜激情视频| 亚洲电影免费在线观看| 亚洲一区二区中文| 国产一区二区三区视频| 亚洲欧美另类人妖| 亚洲第一区中文99精品| 欧美噜噜久久久xxx| 久久精品国产欧美亚洲人人爽| 中文字幕日韩有码| 亚洲精品电影在线| 成人精品一区二区三区电影黑人| 91久久综合亚洲鲁鲁五月天| 色播久久人人爽人人爽人人片视av| 国产精品黄页免费高清在线观看| 在线播放国产一区二区三区| 久久天天躁狠狠躁夜夜躁2014| 中文字幕欧美在线| 亚洲va久久久噜噜噜久久天堂| 九九热这里只有精品免费看| 精品视频在线播放色网色视频| wwwwwwww亚洲| 亚洲3p在线观看| 国产日韩欧美影视| 亚洲毛片在线免费观看| 欧美亚洲一级片| 日本亚洲欧美成人| 国产性色av一区二区| 91在线无精精品一区二区| 精品久久久久久久久久ntr影视| 日韩精品免费在线视频观看| 国产精品久久久久久久9999| 亚洲一区二区免费在线| 精品国产91久久久| 久久精品国产视频| 亚洲精选在线观看| 久久久久日韩精品久久久男男| 在线电影av不卡网址| 国产精品久久久久久搜索| 亚洲午夜色婷婷在线| 成人精品在线观看| 国产日韩在线看片| 国产v综合ⅴ日韩v欧美大片| 亚洲xxx大片| 色综合视频一区中文字幕| 亚洲视频在线观看视频| 久久的精品视频| 中文字幕v亚洲ⅴv天堂| 欧美午夜精品伦理| www.久久草.com| 在线精品国产欧美| 久久久999精品免费| 欧美黑人性猛交| 激情懂色av一区av二区av| 蜜臀久久99精品久久久无需会员| 国内精品久久久久久影视8| 国产精品成人免费电影| 午夜精品一区二区三区在线播放| 国产精品专区一| 亚洲影院色在线观看免费| 亚洲福利视频二区| 欧美极品少妇xxxxx| 亚洲电影免费观看高清| 久久全球大尺度高清视频| 国产美女主播一区| 97久久精品在线| 一区二区欧美在线| 亚洲欧美综合图区| 国产精品va在线播放| 亚洲精品网站在线播放gif| 国产精品高潮呻吟久久av野狼| 日本精品视频在线观看| 亚洲在线观看视频网站| 欧美性xxxxxx| 自拍偷拍亚洲一区| 91精品久久久久久久久久另类| 欧美在线视频一区| 久久久亚洲精品视频| 国产男女猛烈无遮挡91| 国产精品美女999| 久久香蕉国产线看观看网| 欧美性色视频在线| 一本色道久久88精品综合| 日韩毛片在线看| 综合136福利视频在线| 亚洲淫片在线视频| 亚洲激情久久久| 欧美日韩一区二区免费视频| 日韩欧美亚洲一二三区| 国产精品大片wwwwww| 久久精品国产久精国产一老狼| 国产成人精品999| 亚洲成人a**站| 日韩在线视频线视频免费网站| 日本精品免费观看| 欧美电影免费观看网站| 欧美亚洲在线观看| 国产欧美精品一区二区三区-老狼| 欧美成aaa人片免费看| 日韩激情第一页| 日韩欧美a级成人黄色| 亚洲国产成人在线播放| 最近的2019中文字幕免费一页| 久久久国产影院| 欧美成人高清视频| 日韩在线一区二区三区免费视频| 日韩激情av在线免费观看| 91久久国产精品| 米奇精品一区二区三区在线观看| 日韩欧美大尺度| 精品国产一区av| 久久99青青精品免费观看| 26uuu亚洲国产精品| 亚洲欧美成人在线| 亚洲一区二区三区在线免费观看| 亚洲国产日韩欧美综合久久| 精品视频一区在线视频| 久久久亚洲精品视频| 亚洲精品一区二区三区不| 久久精品在线播放| 国产精品白嫩初高中害羞小美女| 日韩**中文字幕毛片| 精品中文字幕久久久久久| 欧美夫妻性生活xx| 中文字幕亚洲第一| 国产99久久久欧美黑人| 国产精品视频白浆免费视频| 69精品小视频| 国内精品久久久久久| 日韩电视剧在线观看免费网站| 亚洲成年网站在线观看| 伊人久久久久久久久久久久久| 亚洲另类激情图| 欧美在线观看一区二区三区| 日本不卡免费高清视频| 日韩黄色高清视频| 亚洲一区二区国产| 精品亚洲一区二区三区四区五区| 国产精品com| 草民午夜欧美限制a级福利片| 久久久久久久色| 国产精品久久久久福利|