CSDN算法版关于排列与组合的贴子多得可以用来砌长城了。去搜下吧。先转篇给你。http://expert.csdn.net/Expert/topic/2495/2495045.xml?temp=.9805719
解决方案 »
- 在main()中调用applet init()方法中使用 applet的getCodeBase();抛NullPointerException求解决方法!谢!
- 求2005/01/01与2004/12/31相差几个月?
- Apache的POI包中公式的运用问题
- 問各有關LINUX的問題
- 有谁可以提供Jbuilder 7(或8)的下载地址?
- 各位请帮忙,关于DISTINCT返回多列不重复的结果集,(用一条sql语句)在线等待
- JBuilder中Integer q;Integer quantity;setQuantity(q-quantity);提示错误:
- 关于 getResource 的小问题
- SCJP模拟题 about GC
- jframe和frame的repaint方法的不同
- 稀奇问题 ,小弟跪拜请教,谢谢!急急急!
- 小弟求救!!(有100分)
依赖前面的结果进行的工作。上面的问题你可以这样理解:这是一个1 2 3 4 5这些数字按照
不同的顺序排列(在离散数学里面是错排问题)。这个问题的解决方法就是利用递归,例如:1)2)3)4)5
每个括号表示一个层次,你只要调用函数swap将数列分组进行交换即可,在方法最里层是将最内部的两个数交换,以次将里面的两个数作为一组然后与倒数第3个交换,如此下去,这就是算法描述
下面是java算法(针对字母的排序):
import java.io.System.*;
//^^^^^^^^^^^^^主程序
public void anagram(String word){
int numofChar=word.length();
if(numofChar==1){
System.out.println(word);
}
else{
for(int i=1;i<=numofChar;i++){ char firstLetter=word.charAt(0);
suffix=word.substring(1,numofChar); anagram(suffix);//递归调用 word=suffix+firstLetter;}
能给出代码吗?上面的还不对啊!!!
你想:
有123,
你的程序结果为
23451
34512
45123
51234
12345
按排列组合来考虑,应有5*4*3*2*1(120)种情况,(当然包括13452-25431这种情况)
递归时应有:
eg:123
23 32
123 213 231 132 312 321
///////////////////////////////////////////////////////
那位有代码,能贴出来吗?谢谢
static int size=0;
public static void permutation(int[] a){
_permutation(a,0);
}
public static void _permutation(int[] a,int i){
if(i==a.length-1){
size++;
print(a);
}
for(int j=i;j<a.length;j++){
swap(a,i,j);
_permutation(a,i+1);
swap(a,i,j);
}
}
public static void swap(int[] a,int i,int j){
if(i!=j){
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
private static void print(int[] a){
for(int i=0;i<a.length;i++)
System.out.print(a[i]+" ");
System.out.println();
}
public static void main(String[] args){
int[] a={1,2,3,4,5};
permutation(a);
System.out.println("total possibilities: "+size);
}
}