一个想了三天零四个小时的笔试题 接收屏幕输入一个字符窜,将该字符串的不同序列的字符串打印出来 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你关键字选的不对,我一搜就搜到了,你都想了这么久了,应该知道怎么从控制台读取吧。http://blog.csdn.net/yuanqingfei/archive/2008/02/01/2076584.aspximport java.util.ArrayList;import java.util.Arrays;public class Test { public static void main(String[] args) { System.out.println(Arrays.toString(permutation("1234"))); } private static String[] permutation(String orginal) { ArrayList<String> list = new ArrayList<String>(); if (orginal.length() == 1) { return new String[] { orginal }; } else { for (int i = 0; i < orginal.length(); i++) { String s = orginal.charAt(i) + ""; String result = ""; String resultA = result + s; String leftS = orginal.substring(0, i) + orginal.substring(i + 1, orginal.length()); for (String element : permutation(leftS)) { result = resultA + element; list.add(result); } } return (String[]) list.toArray(new String[list.size()]); } }} 递归的不是太好理解,你可以搜个非递归的关键字,全排列 java private static String[] permutation(String orginal) { ArrayList<String> list = new ArrayList<String>(); if (orginal.length() == 1) { return new String[] { orginal }; } else { for (int i = 0; i < orginal.length(); i++) { System.out.println("*"+orginal); String s = orginal.charAt(i) + ""; System.out.println("***"+s); String result = ""; String resultA = result + s; String leftS = orginal.substring(0, i) + orginal.substring(i + 1, orginal.length()); System.out.println("******"+leftS); for (String element : permutation(leftS)) { result = resultA + element; list.add(result); } } return (String[]) list.toArray(new String[list.size()]); } }加了用于理解的输出 呵呵,来晚了,老sun天天这么晚睡啊! public class AllSort{ public static void main(String[] args) { char buf[]={'a','b','c'}; perm(buf,0,buf.length-1); } public static void perm(char[] buf,int start,int end){ if(start==end){//当只要求对数组中一个字母进行全排列时,只要就按该数组输出即可 for(int i=0;i<=end;i++){ System.out.print(buf[i]); } System.out.println(); } else{//多个字母全排列 for(int i=start;i<=end;i++){ char temp=buf[start];//交换数组第一个元素与后续的元素 buf[start]=buf[i]; buf[i]=temp; printArray(buf); perm(buf,start+1,end);//后续元素递归全排列 temp=buf[start];//将交换后的数组还原 buf[start]=buf[i]; buf[i]=temp; printArray(buf); } } } public static void printArray (char[] charArray){ System.out.print("Now the array includes: "); for (int i=0; i<charArray.length; i++){ System.out.print(charArray[i]); } System.out.println(""); } } http://blog.csdn.net/No_End_Point/archive/2008/08/22/2814914.aspx旋转法来实现全排列 http://blog.csdn.net/No_End_Point/archive/2008/08/22/2814914.aspx 遞歸思路,將字符串的第一個和第二個換,然後求除第一個外的字符串的全排列...so on..10000!...要命啊... 关键是递归,google上应该有好多的。。来晚了~! 就是字符串里所有字符的全排列。比如:字符串ab的全排列:ab,bcn个字符有n!个全排列。 路过,学习,我个人觉得有两点需要考虑:1, 对字符的合法检测:输入是否合法,包括输入的位数,以及临界状态比如栈溢出,...2. 用递归还是用循环,本人对JAVA不熟悉,所以高手们看看怎么解决好了! 放在数组,然后加个中间变量,接着进行比较,不过稍微麻烦. 可以尝试使用hashmap, 然后按键值来排列, 我也来 贴一个public class QuanPaiLei { public static int MAX = 4; public static boolean state[] = new boolean[MAX + 1]; public static int item[] = new int[MAX + 1]; public static String element[] = { "a", "b", "c","d" }; public static void main(String[] args) { DoPermutation(1); } public static void DoPermutation(int pos) { if (pos > MAX) { for (int j = 1; j <= MAX; j++) System.out.print(element[item[j] - 1]); System.out.println(); return; } for (int i = 1; i <= MAX; i++) { if (!state[i]) { state[i] = true; item[pos] = i; DoPermutation(pos + 1); state[i] = false; } } }} [请教]哈希表本身除了要存储h(k)对应的value以外,也要存储key本身? bufferedimage 覆盖与清楚的问题 关于Robocode的大问题 关于使用log4j过程中继承AppenderSkeleton时参数的问题 这道数学题该如何解? 一些java考试题目,大家帮忙解答一下,拜托了 applet小程序编译成*.html文件用IE浏览乱码。 在linux下用javac找不到javax.swing.*,大家帮个忙 运行出错 2000下的cmd和command命令竟然不同!!!!看一下! 急!!怎样用单链表或者顺序表实现 任意长整数的加减法啊 一个不太理解的设计
http://blog.csdn.net/yuanqingfei/archive/2008/02/01/2076584.aspx
import java.util.ArrayList;
import java.util.Arrays;public class Test {
public static void main(String[] args) {
System.out.println(Arrays.toString(permutation("1234")));
} private static String[] permutation(String orginal) {
ArrayList<String> list = new ArrayList<String>();
if (orginal.length() == 1) {
return new String[] { orginal };
} else {
for (int i = 0; i < orginal.length(); i++) {
String s = orginal.charAt(i) + "";
String result = "";
String resultA = result + s;
String leftS = orginal.substring(0, i)
+ orginal.substring(i + 1, orginal.length());
for (String element : permutation(leftS)) {
result = resultA + element;
list.add(result);
}
}
return (String[]) list.toArray(new String[list.size()]);
}
}
}
关键字,全排列 java
ArrayList<String> list = new ArrayList<String>();
if (orginal.length() == 1) {
return new String[] { orginal };
} else {
for (int i = 0; i < orginal.length(); i++) {
System.out.println("*"+orginal);
String s = orginal.charAt(i) + "";
System.out.println("***"+s);
String result = "";
String resultA = result + s;
String leftS = orginal.substring(0, i)
+ orginal.substring(i + 1, orginal.length());
System.out.println("******"+leftS);
for (String element : permutation(leftS)) {
result = resultA + element;
list.add(result);
}
}
return (String[]) list.toArray(new String[list.size()]);
}
}
加了用于理解的输出
public static void main(String[] args) {
char buf[]={'a','b','c'}; perm(buf,0,buf.length-1);
}
public static void perm(char[] buf,int start,int end){
if(start==end){//当只要求对数组中一个字母进行全排列时,只要就按该数组输出即可
for(int i=0;i<=end;i++){
System.out.print(buf[i]);
}
System.out.println();
}
else{//多个字母全排列
for(int i=start;i<=end;i++){
char temp=buf[start];//交换数组第一个元素与后续的元素
buf[start]=buf[i];
buf[i]=temp;
printArray(buf);
perm(buf,start+1,end);//后续元素递归全排列
temp=buf[start];//将交换后的数组还原
buf[start]=buf[i];
buf[i]=temp;
printArray(buf);
}
}
}
public static void printArray (char[] charArray){
System.out.print("Now the array includes: ");
for (int i=0; i<charArray.length; i++){
System.out.print(charArray[i]);
}
System.out.println("");
}
}
10000!...要命啊...
来晚了~!
ab,bc
n个字符有n!个全排列。
1, 对字符的合法检测:输入是否合法,包括输入的位数,以及临界状态比如栈溢出,...
2. 用递归还是用循环,本人对JAVA不熟悉,所以高手们看看怎么解决好了!
DoPermutation(1);
} public static void DoPermutation(int pos) {
if (pos > MAX) {
for (int j = 1; j <= MAX; j++)
System.out.print(element[item[j] - 1]);
System.out.println();
return;
}
for (int i = 1; i <= MAX; i++) {
if (!state[i]) {
state[i] = true;
item[pos] = i;
DoPermutation(pos + 1);
state[i] = false;
}
}
}
}