求教关于字符串的排序 给你任意一个字符串,要求你给出此字符串不同排序的数量并显示?如给出字符串"abc",其有如下6种排序 "abc"、"acb"、"cba"、"cab"、"bac"、"bca" 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 递归问题(二)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(""); } } 先将字符串打碎成单个字符,那么如例就是 “a","b","c",在对这3个字符串进行排列组合,就会有6个可能,然后将这6个字符串存入到hashSet中,就会自动去掉重复的元素,然后去size()得到个数,遍历显示所有组合 下面的程序代码比较简练,算法解释起来也有点麻烦,我大致说一下。用循环遍历你要操作的字符串的每一个字符,对每一个字符,用它把原来的字符串分隔成3个部分比如说 "abcd" , 我可以用字符 a 把它分成三个部分: "" 、"a" 和 "bcd" ,也可以用字符 b 把它分成这样三分: "a" 、"b"和 "cd" 。这样分隔的作用是这样的,要找出 "abcd" 的所有排序, 我们可以让 a 排在最前面,然后找出 "bcd"字符串的各种排序(这个求解过程可以用递归完成),并放在 a 的后面。同样的道理,我们可以找出以 b 开头的各种排序方式,这时就需要递归的去求 "abcd" 中除了 b 以外的各个字符组成的字符串(也就是"a" 和 "cd" 两部分组成的新字符串"acd" ,这也就是我要把一个字符串分成三部分的原因)的排序。代码如下:import java.util.Scanner;public class TTT{ static int count=0; static String s=""; //中间变量 public static void main(String[] args) { String str="abcd";// 用下面两行代码可以通过键盘输入你要操作的字符串// Scanner in=new Scanner(System.in);// str=in.nextLine(); getStr(str); System.out.println("总共有 "+count+" 种不同的排列方式"); } public static void getStr(String str){ if(str.equals("")){ count++; System.out.println(s); } for(int i=0;i<str.length();i++){ s+=str.charAt(i); String newStr=str.substring(0, i)+str.substring(i+1); getStr(newStr); s=s.substring(0,s.length()-1); } } } 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; } } }}这样也可以 [求助]java 函数内创建对象的方法? 请教 如何将 list 转化为 double数组 用JNative调用dll文件,出现虚拟机崩溃导致tomcat自动停止 关于求两个类对象之间差异的方法,望大家指导。具体见内 xml问题!!!!在线等!!!1 学Java已经一个多月了 请问如何设置sqlj的路径 请问java中如何实现C++中cin的功能 谢谢 请问一个jdbc的问题。 请问JAVA可用来做什么?是不是只能作网站? 如何使用package包名,通过反射找到该包下面的类?(在线加分) 数据库怎样移植数据到别的机器上去?MySQL和Oracle...
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("");
}
}
用循环遍历你要操作的字符串的每一个字符,对每一个字符,用它把原来的字符串分隔成3个部分比如说 "abcd" , 我可以用字符 a 把它分成三个部分: "" 、"a" 和 "bcd" ,也可以用字符 b 把它分成这样三分: "a" 、"b"和 "cd" 。这样分隔的作用是这样的,要找出 "abcd" 的所有排序, 我们可以让 a 排在最前面,然后找出 "bcd"字符串的各种排序(这个求解过程可以用递归完成),并放在 a 的后面。同样的道理,我们可以找出以 b 开头的各种排序方式,这时就需要递归的去求 "abcd" 中除了 b 以外的各个字符组成的字符串(也就是"a" 和 "cd" 两部分组成的新字符串"acd" ,这也就是我要把一个字符串分成三部分的原因)的排序。代码如下:import java.util.Scanner;public class TTT{
static int count=0;
static String s=""; //中间变量
public static void main(String[] args) {
String str="abcd";
// 用下面两行代码可以通过键盘输入你要操作的字符串
// Scanner in=new Scanner(System.in);
// str=in.nextLine();
getStr(str);
System.out.println("总共有 "+count+" 种不同的排列方式");
}
public static void getStr(String str){
if(str.equals("")){
count++;
System.out.println(s);
}
for(int i=0;i<str.length();i++){
s+=str.charAt(i);
String newStr=str.substring(0, i)+str.substring(i+1);
getStr(newStr);
s=s.substring(0,s.length()-1);
}
}
}
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;
}
}
}
}
这样也可以