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

要求是这样的:

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

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

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

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

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

具类中体现如下:

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


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

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

[01234],[012],[012345],[0123456],[0123456],[012],[01234]

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值