前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >从N个数组分别取值,穷尽全部情况

从N个数组分别取值,穷尽全部情况

作者头像
ZONGLYN
发布2019-08-08 10:48:58
8080
发布2019-08-08 10:48:58
举报
文章被收录于专栏:程序萌部落程序萌部落

(本文年代久远,请谨慎阅读)要求是这样的:

具体要求

有N个数组,每个数组元素不定,从每个数组都中取出一个,组成长度为N的序列,求穷尽序列的所有情况。

很明显这区别于给定几个元素并把这些元素全排列的问题,全排列要交换位置,此处则不同,暂称“伪全排列”。

网上资料很多,不过多用指针或者指针数组,这对于JAVA来说没一点用。

在此,我把JAVA中的实现来个详细说明。

首先,思路为递归,将其写为成员函数,方便调用。

具体实现

代码语言:javascript
复制
public class ABC{   
    private static int[][]str;  
    public ABC() {   
            ... ...  
            //str[][]的赋值语句,得到存储完成的二维数组,见‘创建动态二维数组的技巧’  
            ... ...  
        int result[]=new int[ N ];  //此处即符合要求的,有N个数组  
        show(result,0);  //进入递归函数,进行测试  
    }   
    public static void show(int[] result1, int curr){      //curr即代表当前取元素的数组  
        if (curr == N) {    //curr==N即完成一个序列,输出一次结果集  
            for(int k=0;k<result1.length;k++) System.out.print(result1[k]);   
            System.out.println();   //输出格式控制  
        }else {  
            for (int i = 0; i <str[curr].length; ++i) {     //每次循环此次取元素的数组的长度  
                result1[curr] = str[curr][i];               //关键赋值处,给到结果集  
                show(result1, curr+1);  //一次递归完成,即从下一个数组中去取元素,curr+1.       
        }  
    }  
}

以上可完成所有情况的输出,输入集是个二维数组,可方便由多种数据类型转化得到。输出是一维数组,也可方便进行再处理,故代码易改造,简洁明了。以上即是实现的所有代码(测试+方法)。

测试如下,从七个数组中取:

代码语言:javascript
复制
[01234],[012],[012345],[0123456],[0123456],[012],[01234]

情况序列计数为66150个,结果集输出正确,此处省略。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-09-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 具体要求
  • 具体实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档