• 主页

# 请教一个算法的问题，先谢谢大家了

mjjzg 2009-11-06 10:27:26

...全文
243 点赞 收藏 26

26 条回复
liguominz 2009年11月06日
mark~

dongyang369 2009年11月06日

mjjzg 2009年11月06日

closewbq 2009年11月06日

``````
import java.util.ArrayList;
import java.util.Arrays;
public class Permutation {
public static void main(String[] args) {
String[] strs=permutation("12345");
System.out.println("全部排列的个数为："+strs.length+"个");
System.out.println("全部排列的元素是：");
System.out.println(Arrays.toString(strs));
}

public  static String[] permutation(String str) {
ArrayList<String> myList = new ArrayList<String>();
char[] strChars=str.toCharArray();
char temp;
long times=1;
int pos=strChars.length-2;
int increment=-1;
for(int i=1;i<strChars.length+1;i++){
times*=i;
}
for(int i=1;i<times;i++){
temp=strChars[pos];
strChars[pos]=strChars[pos+1];
strChars[pos+1]=temp;
pos+=increment;
if(pos==-1){
increment=1;
pos=0;
temp=strChars[strChars.length-2];
strChars[strChars.length-2]=strChars[strChars.length-1];
strChars[strChars.length-1]=temp;
i++;
}else if(pos==strChars.length-1){
increment=-1;
pos=strChars.length-2;
temp=strChars[0];
strChars[0]=strChars[1];
strChars[1]=temp;
i++;
}
}
return myList.toArray(new String[0]);
}

}
``````

[12354, 12534, 15234, 51234, 51243, 15243, 12543, 12453, 12435, 21435, 21453, 21543, 25143, 52143, 52134, 25134, 21534, 21354, 21345, 12345, 12354, 12534, 15234, 51234, 51243, 15243, 12543, 12453, 12435, 21435, 21453, 21543, 25143, 52143, 52134, 25134, 21534, 21354, 21345, 12345, 12354, 12534, 15234, 51234, 51243, 15243, 12543, 12453, 12435, 21435, 21453, 21543, 25143, 52143, 52134, 25134, 21534, 21354, 21345, 12345, 12354, 12534, 15234, 51234, 51243, 15243, 12543, 12453, 12435, 21435, 21453, 21543, 25143, 52143, 52134, 25134, 21534, 21354, 21345, 12345, 12354, 12534, 15234, 51234, 51243, 15243, 12543, 12453, 12435, 21435, 21453, 21543, 25143, 52143, 52134, 25134, 21534, 21354, 21345, 12345, 12354, 12534, 15234, 51234, 51243, 15243, 12543, 12453, 12435, 21435, 21453, 21543, 25143, 52143, 52134, 25134, 21534, 21354, 21345, 12345]

closewbq 2009年11月06日
[Quote=引用 11 楼 closewbq 的回复:]

[/Quote]

closewbq 2009年11月06日

youjianbo_han_87 2009年11月06日

KantChild 2009年11月06日

lzh_me 2009年11月06日
up

KantChild 2009年11月06日

1创建二叉树，1，2，3对应二叉树根节点，左，右子树根节点；
2先序遍历，后序遍历，得到两个排列；
3判断排列是否是新排列，如果是，保存起来，然后重复1，2，直到没有新排列结束。
4输出所有保存的排列

lihao1129 2009年11月06日

casablancaliu 2009年11月06日

APOLLO_TS 2009年11月06日

guodong66 2009年11月06日

yellow0323 2009年11月06日

haojia0716 2009年11月06日

haojia0716 2009年11月06日

``````
public class Arrangement {

public static void go(int[] data) {
go(data, new boolean[data.length], new int[data.length], 0);
}

public static void go(int[] data, boolean[] state, int[] flag, int p) {
print(p, data, flag);

for (int i = 0; i < data.length; i++) {
if (!state[i]) {
state[i] = true;
flag[p] = i; // 或者 flag[i] = p; 都可以
go(data, state, flag, p + 1);
state[i] = false;
}
}
}

public static void print(int p, int[] data, int[] flag) {
if (p >= data.length) {
for (int i = 0; i < data.length; i++) {
System.out.print(data[flag[i]] + " ");
}
System.out.println();
}
}

public static void main(String[] args) {
int[] data = { 1, 2, 3 };
go(data);
}
}

``````

panzhixiong 2009年11月06日

panzhixiong 2009年11月06日

package com.test;

public class test {
public static void main(String[] args) {
String s = "122345";
char[] c = s.toCharArray();
new test().zuhe(c, c.length, 0);
System.out.print("可能的组合数：" + kk);
}
static int kk = 0;
private void zuhe(char[] array, int n, int k) {
if (n == k) {
String str = new String(array);
System.out.println(str);
++kk;
} else {
for (int i = k; i < n; i++) {
swap(array, k, i);
zuhe(array, n, k + 1);
swap(array, i, k);
}
}
}
private void swap(char[] a, int x, int y) {
char temp = a[x];
a[x] = a[y];
a[y] = temp;
}
}

Java EE

3.7w+

22.5w+

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器，保护我们的业务核心组件（中间件），以延续它的生命力，而不是依赖J2SE/J2EE版本。