这120个三位数,对应百位、十位、个位,就会有120*120*120个组合
三位数 如: 012 013 014 015 016 017 018 019 023 024 025 026……789
组合 如:012/012/012 012/012/013 012/012/014
请问有什么好的方法快速生成?
并列出来插入数据库!
每个组合可以生成27个不相同的三位数:
如:012/012/013
有:000 001 003 ..... 223
这些三位数:如何与000-999 这1000个数快速比对统计!
希望大家能帮忙想一些好的解决方法!
谢谢!
25 个解决方案
#1
判断随即选出的三个数和前面是否相同就可以了 插入数据库用insert 其余楼主你会的吧
#2
没看明白
LZ是想生成0-9 没有重复的三位数 不知道000 或者001 算不算重复的,或者算不算三位数
余下的就是一般的排列组合了
LZ是想生成0-9 没有重复的三位数 不知道000 或者001 算不算重复的,或者算不算三位数
余下的就是一般的排列组合了
#3
mark
#4
没看明白
#5
UP
#6
楼主的意思是?
#7
good
顶一个~~~~
#8
我觉得 自增 行的 比较好。。。
#10
有没有好的建议与想法呀!
JAVA算法实现从000到999之间挑选出个十百三位不重复的数字
就是个位,十位,百位,不能有重复。如:123,231,132,213,312,321 算为重复,只能取最小的123 这6个三位数只算为一个不重重复的三位数
组合会有120*120*120种
这组合会生成27个不重复的三位数字
如:012/012/013
有:000 001 003 ..... 223
比对的话,有没有好的算法呢?
这些大的组合下的三位数(000 001 003 ..... 223 )如何有效率的去与000-999这1000个三位数比与统计
JAVA算法实现从000到999之间挑选出个十百三位不重复的数字
就是个位,十位,百位,不能有重复。如:123,231,132,213,312,321 算为重复,只能取最小的123 这6个三位数只算为一个不重重复的三位数
组合会有120*120*120种
这组合会生成27个不重复的三位数字
如:012/012/013
有:000 001 003 ..... 223
比对的话,有没有好的算法呢?
这些大的组合下的三位数(000 001 003 ..... 223 )如何有效率的去与000-999这1000个三位数比与统计
#11
mark
#12
mark下。。。
#13
楼主最好还是把原题发出来,让大家看看,如果是项目中需要,则把需求发出来,让大家看看。。。
#14
没有明白楼主的意思
#15
贴一个求JAVA算法实现从000到999之间挑选出个十百三位不重复的数字的算法
import java.util.List;
/**
* <pre>
* 求m取n的所有组合。
* m个数分别为0,1,2...m-1.
* 算法简述:
* 二个组合,若仅有元素顺序不同,视其为同一个组合。
* 左位系低位,右位系高位。
* 按自然的取法取第一个组合(各数位分别是:0,1,2...n-1),以后的所有组合都经上一个组合变化而来:
* 从右至左,找到有增量空间的位,将其加1,使高于该位的所有位,均比其左邻位大1,从而形成新的组合。
* 若所有位均无增量空间,说明所有组合均已被遍历。
* 使用该方法所生成的组合数中:对任意组合int[] c,下标小的数必定小于下标大的数.
* </pre>
*/
public class Combination {
int n, m;
int[] pre;// previous combination.
public Combination(int n, int m) {
this.n = n;
this.m = m;
}
/**
* 取下一个组合。可避免一次性返回所有的组合(数量巨大,浪费资源)。 if return null,所有组合均已取完。
*/
public int[] next() {
if (pre == null) {// 取第一个组合,以后的所有组合都经上一个组合变化而来。
pre = new int[n];
for (int i = 0; i < pre.length; i++) {
pre[i] = i;
}
int[] ret = new int[n];
// 将 pre 数组复制到数组 ret 中
System.arraycopy(pre, 0, ret, 0, n);
return ret;
}
int ni = n - 1, maxNi = m - 1;
while (pre[ni] + 1 > maxNi) {// 从右至左,找到有增量空间的位。
ni--;
maxNi--;
if (ni < 0)
return null;// 若未找到,说明了所有的组合均已取完。
}
pre[ni]++;
while (++ni < n) {
pre[ni] = pre[ni - 1] + 1;
}
int[] ret = new int[n];
System.arraycopy(pre, 0, ret, 0, n);
return ret;
}
/**
* @param args
*/
public static void main(String[] args) {
Combination c = new Combination(3, 10);
int[] ret = new int[3];
int count = 0;
while((ret=c.next())!=null) {
for(int i : ret)
System.out.print(i);
System.out.println();
count ++;
}
System.out.println(count);
}
}
#16
#15楼 顶
#17
记下了
#18
路过,学习学习
#19
路过~
#20
什么呀,没看明白你的题目
#21
学习
#22
路过,学习一下
#23
路过
#24
生成谁机数
#25
不是生成随机数,而是分析数据!
用来分析彩票数据的!*3D!有没有好的解决方法!
#1
判断随即选出的三个数和前面是否相同就可以了 插入数据库用insert 其余楼主你会的吧
#2
没看明白
LZ是想生成0-9 没有重复的三位数 不知道000 或者001 算不算重复的,或者算不算三位数
余下的就是一般的排列组合了
LZ是想生成0-9 没有重复的三位数 不知道000 或者001 算不算重复的,或者算不算三位数
余下的就是一般的排列组合了
#3
mark
#4
没看明白
#5
UP
#6
楼主的意思是?
#7
good
顶一个~~~~
#8
我觉得 自增 行的 比较好。。。
#9
请楼主移步:
Java中的排列组合问题(一)
#10
有没有好的建议与想法呀!
JAVA算法实现从000到999之间挑选出个十百三位不重复的数字
就是个位,十位,百位,不能有重复。如:123,231,132,213,312,321 算为重复,只能取最小的123 这6个三位数只算为一个不重重复的三位数
组合会有120*120*120种
这组合会生成27个不重复的三位数字
如:012/012/013
有:000 001 003 ..... 223
比对的话,有没有好的算法呢?
这些大的组合下的三位数(000 001 003 ..... 223 )如何有效率的去与000-999这1000个三位数比与统计
JAVA算法实现从000到999之间挑选出个十百三位不重复的数字
就是个位,十位,百位,不能有重复。如:123,231,132,213,312,321 算为重复,只能取最小的123 这6个三位数只算为一个不重重复的三位数
组合会有120*120*120种
这组合会生成27个不重复的三位数字
如:012/012/013
有:000 001 003 ..... 223
比对的话,有没有好的算法呢?
这些大的组合下的三位数(000 001 003 ..... 223 )如何有效率的去与000-999这1000个三位数比与统计
#11
mark
#12
mark下。。。
#13
楼主最好还是把原题发出来,让大家看看,如果是项目中需要,则把需求发出来,让大家看看。。。
#14
没有明白楼主的意思
#15
贴一个求JAVA算法实现从000到999之间挑选出个十百三位不重复的数字的算法
import java.util.List;
/**
* <pre>
* 求m取n的所有组合。
* m个数分别为0,1,2...m-1.
* 算法简述:
* 二个组合,若仅有元素顺序不同,视其为同一个组合。
* 左位系低位,右位系高位。
* 按自然的取法取第一个组合(各数位分别是:0,1,2...n-1),以后的所有组合都经上一个组合变化而来:
* 从右至左,找到有增量空间的位,将其加1,使高于该位的所有位,均比其左邻位大1,从而形成新的组合。
* 若所有位均无增量空间,说明所有组合均已被遍历。
* 使用该方法所生成的组合数中:对任意组合int[] c,下标小的数必定小于下标大的数.
* </pre>
*/
public class Combination {
int n, m;
int[] pre;// previous combination.
public Combination(int n, int m) {
this.n = n;
this.m = m;
}
/**
* 取下一个组合。可避免一次性返回所有的组合(数量巨大,浪费资源)。 if return null,所有组合均已取完。
*/
public int[] next() {
if (pre == null) {// 取第一个组合,以后的所有组合都经上一个组合变化而来。
pre = new int[n];
for (int i = 0; i < pre.length; i++) {
pre[i] = i;
}
int[] ret = new int[n];
// 将 pre 数组复制到数组 ret 中
System.arraycopy(pre, 0, ret, 0, n);
return ret;
}
int ni = n - 1, maxNi = m - 1;
while (pre[ni] + 1 > maxNi) {// 从右至左,找到有增量空间的位。
ni--;
maxNi--;
if (ni < 0)
return null;// 若未找到,说明了所有的组合均已取完。
}
pre[ni]++;
while (++ni < n) {
pre[ni] = pre[ni - 1] + 1;
}
int[] ret = new int[n];
System.arraycopy(pre, 0, ret, 0, n);
return ret;
}
/**
* @param args
*/
public static void main(String[] args) {
Combination c = new Combination(3, 10);
int[] ret = new int[3];
int count = 0;
while((ret=c.next())!=null) {
for(int i : ret)
System.out.print(i);
System.out.println();
count ++;
}
System.out.println(count);
}
}
#16
#15楼 顶
#17
记下了
#18
路过,学习学习
#19
路过~
#20
什么呀,没看明白你的题目
#21
学习
#22
路过,学习一下
#23
路过
#24
生成谁机数
#25
不是生成随机数,而是分析数据!
用来分析彩票数据的!*3D!有没有好的解决方法!