求二维数组的全排列组合,二位数组的自乘积问题

    xiaoxiao2026-03-02  7

    CG在ETP基地的培训也有一段时间了,这期间也有几次考试,下面将要分享的是最近一次笔试的考试题目,该题算是JAVA考试的附加题,要求也很简单,下面是原题 二维数组的长度和初始值均由输入确定,如何求出此数组的全排列组合, 即:int a[X][X] = {{X,X,X},...}如下 int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}} 或者是 int a[4][4] = {{1,2,3,4},{4,5,6,7},{7,8,9,10}} 计算a[3][3]的结果如下: 147,148,149 157,158,159 167,168,169 247,248,249 ............ 解决思路: 根据本题的算法复杂度可知3*3的二维数组可以有 3^3 = 27中输出结果,而利用这个结果进行不同的%和/运算,可以得到以下的周期变化的规律 //总输出结果数 int it = (int) Math.pow((a[0].length),(a.length)) -1; //产生0-a[0].length周期为1变化规律 //以3为例:210210210210..... it % a[0].length; //产生0-a[0].length周期为a[0].length变化规律 //以3为例:222111000222111000 (it / a[0].length) % a[0].length; //产生0-a[0].length周期为a[0].length * a[0].length变化规律 //以3为例:2222222221111111110000... (it / a[0].length) / a[0].length % a[0].length; 以上规律则满足我们所需要的数组下标表示 JAVA代码如下: /**求二维数组的全排列组合*by CG*/public static void main(String[] args) { //测试数组 int a[][] = {{1 , 2 , 3 },{4 , 5 , 6 },{7 , 8 , 9}}; String s; //总循环次数,控制循环量 int it = (int) Math.pow((a[0].length),(a.length)) -1; while(it >= 0){ s = ""; //it % a[0].length; //(it / a[0].length) % a[0].length; //(it / a[0].length) / a[0].length % a[0].length; //临时变量,保存迭代器 int temp = it; for(int m = 0 ; m < a length mbr> if(temp / a[0].length >= 0) { s += a[m][temp % a[0].length]; temp /= a[0].length; } } System.out.println(s); it--; }//while}//main -------------------------------------------------------------------------------------- - 版权声明: - 如在本页面内无特别说明,本文内容均为[李大仁博客]原创,本文版权归[李大仁博客]所有。 - 欢迎转载,转载请务必在文章页面明显位置提供原文链接并注明出处。欢迎您在转载本文时保留本段声明。 - 文章标题: [算法]求二维数组的全排列组合,二位数组的自乘积问题 - 独立博客: 李大仁博客 - 永久链接:http://www.lidaren.com/archives/693 -------------------------------------------------------------------------------------- 以上内容由博客自动发布工具自动发布,最终显示内容和效果会与原文内容有所偏差,敬请谅解。
    转载请注明原文地址: https://ju.6miu.com/read-1307539.html
    最新回复(0)