文档章节

数组排列组合

WangPerry
 WangPerry
发布于 2014/11/21 18:35
字数 237
阅读 24
收藏 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

WangPerry

粉丝 10
博文 17
码字总数 9551
作品 0
深圳
架构师
程序员必备算法——排列组合

程序员必备算法——排列组合 [TOC] 还记得排列组合吗? 在高中的时候最常接触的莫过于排列组合了,毕竟高考必考的嘛。我们先来回忆下这两个的公式是啥: 如果看到这个还有一丢丢的印象,说明...

窗边的扁豆
2017/10/07
0
0
PostgreSQL 遗传学应用 - 矩阵相似距离计算 (欧式距离,...XX距离)

标签 PostgreSQL , 背景 生物科学中相当重要的工作之一解开遗传密码? 欧式空间计算,是其中的一个需求,很有意思吧,PostgreSQL可以用来解开遗传密码。 https://en.wikipedia.org/wiki/Eucl...

德哥
2017/12/27
0
0
next_permutation(全排列算法)

STL提供了两个用来计算排列组合关系的算法,分别是nextpermutation和prevpermutation。首先我们必须了解什么是“下一个”排列组合,什么是“前一个”排列组合。考虑三个字符所组成的序列{a,...

angel_kitty
2017/02/12
0
0
【递归】阶乘、全排列 、组合、二分查找

递归(recursion):程序调用自身的编程技巧。 递归满足2个条件: 1)有反复执行的过程(调用自身) 2)有跳出反复执行过程的条件(递归出口) 最简单的例子是阶乘 全排列 从n个不同元素中任...

SibylY
2016/07/03
32
0
47. Permutations II

使用递归算法特性:必须的终止条件子问题比原来的问题小子问题可以再递归求解子问题的解能够组成大问题的解 a bc b ac c ba

datacube
2016/07/05
5
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

vue+element-ui操作删除(单行和批量删除)

页面展示: <template><!-- 表格内容 --><el-table :data="packData" border style="width: 100%" ref="multipleTable" @selection-change="handleSelectionChange"><el-tab......

琴妹
11分钟前
0
0
基于vue(element ui) + ssm + shiro 的权限框架

zhcc 基于vue(element ui) + ssm + shiro 的权限框架 引言 心声 现在的Java世界,各种资源很丰富,不得不说,从分布式,服务化,orm,再到前端控制,权限等等玲琅满目,网上有句话说,语言框架...

DarrenHu_吴邪
18分钟前
1
1
数据库水平切分(MyCat分片)

范围分片 io.mycat.route.function.AutoPartitionByLong 自动范围分片 Function名称:rang-long(配置文件默认) 枚举分片 io.mycat.route.function.PartitionByFileMap 枚举分片 Funtion名称...

这很耳东先生
20分钟前
0
0
读《HeadFirst设计模式》笔记之外观模式

外观模式:提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。 举个栗子: 建了一个家庭影院,但是每次享受家庭影院时,你发现需要执行 将灯...

suyain
21分钟前
0
0
MongoDB分片配置

简单注解: mongos 路由进程, 应用程序接入mongos再查询到具体分片,监听端口默认27017 config server 路由表服务, 每一台都具有全部chunk的路由信息 shard为数据存储分片, 每一片都可以是...

LUIS1983
28分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部