首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

求一数字组合的java算法,该怎么解决

2012-03-09 
求一数字组合的java算法例如现在有1,2,3 三个数将它这样组合:1,2,3,11,2,3,21,2,3,31,3,3,3 的所有组合。允

求一数字组合的java算法
例如现在有1,2,3 三个数

将它这样组合:1,2,3,1
  1,2,3,2
  1,2,3,3
  1,3,3,3 的所有组合。
 允许每一组数都可以有重复,但不能出现任意两组数顺序相同 

例如[1,2,3,1]  
  [1,2,3,1]

[解决办法]
模拟一个3进制就行了,可以这样做:

Java code
        int[] a = new int[]{1, 1, 1, 1};        outer: while(true){            System.out.println(Arrays.toString(a));            int j = 3;            while((a[j]+=1)==4){                a[j]=1;                j--;                if (j<0) break outer;            }        }
[解决办法]
乱写的,没这么简单吧?
for (int n1 = 1; n1 <= 3; n1++)
for (int n2 = 1; n2 <= 3; n2++)
for (int n3 = 1; n3 <= 3; n3++)
for (int n4 = 1; n4 <= 3; n4++) {
System.out.print(n1);
System.out.print(n2);
System.out.print(n3);
System.out.print(n4);
System.out.println();
}
[解决办法]
1.先得到无重复key,1,2,3的key就是int[]keys=new int[]{1,2,3}
2.位数是四位,全排列的数一共有keys.length的位数次方,也就是3*3*3*3个
3.用一个数number表示这个排列顺序,number%keys.length表示个位的值为keys[number%keys.length]
十位为keys[number/keys.length%keys.length]
千位为keys[number/keys.length/keys.length%keys.length]
number的范围为0 到 (3*3*3*3-1)
最终一个for就可以搞定

热点排行