数组排列组合
数组排列组合
WangPerry 发表于3年前
数组排列组合
  • 发表于 3年前
  • 阅读 20
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 十分钟定制你的第一个小程序>>>   

摘要: 二维数组排列组合
public class Test {

    public static void main(String[] args) {
        String[][] dataArray = {{"zhong","chong"},{"qing"},{"hai","huan"},{"ri"}};
        combine(dataArray, 4);
    }
    public static void combine(String[][] data, int n){
        if (n > data.length) {n = data.length;}
        int[] idx = new int[data.length];
        for (int i=0; i<data.length; i++) {
            if (i<data.length-n) {idx[i]=0;}
            else {idx[i]=1;}
        }
        List<String> list = new ArrayList<>();
        while (idx[0] < 2) {
            int cnt=0, dig=0;
            int[] gp = new int[n];
            for (int i=0; i<idx.length; i++) {
                if (idx[i] == 1) {
                    if (i<n) {dig++;}
                    if (cnt<n) {gp[cnt] = i;}
                    cnt++;
                }
            }
            if (n == cnt) {
                int[] subIdx = new int[n];
                Arrays.fill(subIdx, 0);
                while (subIdx[0] < data[gp[0]].length) {
                    StringBuilder sb = new StringBuilder();
                    for (int i=0; i<n; i++) {
                        sb.append(data[gp[i]][data[gp[i]].length-subIdx[i]-1]);
                    }
                    list.add(0, sb.toString());

                    subIdx[n-1]++;
                    for (int i=n-1; i>0; i--) {
                        if (subIdx[i] == data[gp[i]].length) {
                            subIdx[i] = 0;
                            subIdx[i-1]++;
                        } else {
                            break;
                        }
                    }
                }
            }
            if (dig == n) {break;}

            idx[data.length-1]++;
            for (int i=data.length-1; i>0; i--) {
                if (idx[i] == 2) {
                    idx[i] = 0;
                    idx[i-1]++;
                } else {
                    break;
                }
            }

        }

        int count = 0;
        for (String s : list) {
            System.out.printf("%s", s);
            System.out.println();
            count++;
            if (count%10 == 0) {System.out.println();}
        }
        System.out.printf("\ncount=%d\n", count);
    }
}

运行结果:

zhongqinghairi

zhongqinghuanri

chongqinghairi

chongqinghuanri

count=4


标签: 排列组合 组合
共有 人打赏支持
WangPerry
粉丝 11
博文 15
码字总数 9551
×
WangPerry
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: