为什么喜欢Java? 看这个排列组合问题
java吧
全部回复
仅看楼主
level 12
那十无忧 楼主
有 a, b, c, d, e, 取任意三个排列,列举所有排列方式
2012年08月08日 00点08分 1
level 12
那十无忧 楼主
2012年08月08日 00点08分 2
level 12
那十无忧 楼主
等晚上回家把 Permutation 和 Combination 工具类整理到我的博客上共享。
[鲁拉]
2012年08月08日 00点08分 3
为什么我从来没有用到这两个类[不高兴]
2013年12月18日 01点12分
自己写的[钱]我说怎么没听过
2013年12月18日 01点12分
回复 拼命微笑s :[酷]
2013年12月18日 04点12分
level 16
恩?这啥方法……没用过……
2012年08月08日 00点08分 4
public class Permutation<E> implements Iterable<List<E>>{ ... }
2012年08月08日 01点08分
2012年08月08日 01点08分
2012年08月08日 01点08分
level 7
Permission.of()这个方法api没有是自己写的?
2012年08月08日 01点08分 5
是的
2012年08月08日 01点08分
Permutation.of() 静态工厂方法
2012年08月08日 01点08分
level 14
...... 我以前还自己写过一个实现 Iterator的排列组合工具,没想到JDK里原来有啊[拍砖]
2012年08月08日 01点08分 6
JDK里貌似没有... ...这个是我自己写的 [汗]
2012年08月08日 01点08分
回复 @那十无忧 : ...好吧
2012年08月08日 01点08分
回复 @那十无忧 : 排列与组合分成两个类不科学[哈哈]
2012年08月08日 01点08分
回复 @纯金键盘 :排列类可以取 0 到 N 个来排列,组合类只管组合
2012年08月08日 01点08分
level 12
那十无忧 楼主
@纯金键盘 :
我的排列组合只处理了:固定个数,取不重复元素排列的情况,源**大小作了限制,为1024,支持用 BigInteger 类型的 index 访问第 index 种取值/排列情况。
即使这样,排列总数也已经很大了:

2012年08月08日 01点08分 8
其实大小是不用限制的,因为是用迭代式输出,类里不保存已经算出的结果,next()返回后就仍了,第二是不要用递归就好了,
2012年08月08日 01点08分
回复 @纯金键盘 :恩,话是这么说... ...我跑了: 输出从 1! 到 10000!,看了运行时间... ...还是加了1024的限制,将来要改也很容易@ [汗]
2012年08月08日 01点08分
回复 @那十无忧 :[Yeah] 晚上来看你贴代码了!
2012年08月08日 01点08分
回复 @纯金键盘 :[Yeah] 好的~@
2012年08月08日 01点08分
level 6
public class ArrangementTest{
public static void main(String[] args) {
String parameter = "abc"; //输入任意字符串序列
Set<String> set =action(parameter);
System.out.println("Arrangement number:"+set.size());
for(String s : set){
System.out.println(s);
}
}
private static Set<String> action(String parameter){
if(parameter.length() == 1){
Set<String> set = new HashSet<String>();
set.add(parameter);
return set;
}
Set<String> resultList = new HashSet<String>();
for(int i=0;i<parameter.length();i++){
String s = parameter.substring(i,i+1);
String rest = parameter.substring(0,i)+parameter.substring(i+1);
Set<String> list = action(rest);
for(String str : list){
StringBuilder sb = new StringBuilder(s.length()+str.length());
sb.append(s);
sb.append(str);
resultList.add(sb.toString());
}
}
return resultList;
}
}

2012年08月08日 02点08分 9
[Love]
2012年08月08日 12点08分
我输入C3/49 得出139的数量! 亲,这是组合算法!
2013年12月17日 16点12分
level 12
那十无忧 楼主
2012年08月08日 12点08分 10
我来了,看看先
2012年08月08日 12点08分
回复 @纯金键盘 :[惊讶]@ 有错轻拍啊
2012年08月08日 12点08分
回复 @那十无忧 :完美的!
2012年08月08日 12点08分
回复 @那十无忧 : 到现在没看完[汗] 有点小长[Love]
2012年08月08日 12点08分
level 13
[大惊]这个有意思!
2012年08月08日 12点08分 11
[Kiss]
2012年08月08日 12点08分
第一次用 csdn 的博客,代码真难看
2012年08月08日 12点08分
level 6
lz
总结得不错[口水]
2012年08月08日 23点08分 12
level 14
弱弱的问一句,枚举怎么还能写方法呀?这不是赶上类了吗?我对枚举的概念还停留在c语言阶段[汗][寻死]
2012年08月09日 00点08分 13
[鄙视] 本来就是类呀
2012年08月09日 02点08分
level 14
趁快下班赶制了一个纸糊的简陋版本,勿拍[哈哈]

2012年08月09日 09点08分 14
level 14
import java.util.Iterator;
public class ZH implements Iterator {
private int [] source = {1,2,3,4,5} ;
private int resultSize =3;
public int[] resultIndex= new int[resultSize];
Object[] result = new Object[resultSize]; void init() {
for (int i = 0; i < resultSize; i++)
resultIndex[i] = i + 1;
resultIndex[resultSize - 1]--;
}
int getAddedIndex(){
for( int i = resultSize - 1,j = 0 ; i >=0 ; i-- ,j++ )
if( resultIndex[ i ] != source.length - j )
return i;
return -1;
}
public Object[] next(){
resultIndex[ getAddedIndex() ] += 1;
for( int i =0 ; i < resultSize ; i++ )
result[ i ] = source[ resultIndex[ i ] -1 ] ;
return result;
}
public boolean hasNext(){ return getAddedIndex() != -1 ; }
public void remove() {}
public static void main(String args[]){
ZH p= new ZH();
p.init();
while ( p.hasNext() )
p.next() ;
}
}
2012年08月09日 09点08分 15
[Love] 运行一下试试看先
2012年08月09日 10点08分
level 9
2013年04月29日 10点04分 16
[真棒]
2013年12月18日 04点12分
level 11
2013年04月30日 06点04分 17
[真棒]
2013年12月18日 04点12分
level 8
2013年04月30日 06点04分 18
[真棒]
2013年12月18日 04点12分
吧务
level 15
2013年04月30日 06点04分 19
level 9
2013年04月30日 07点04分 20
[真棒]
2013年12月18日 04点12分
1 2 尾页