发布网友
共5个回答
热心网友
1.先给你程序
public class Test{
public static void main(String[] args) {
char buf[]={'a','b','c','d'};
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;
perm(buf,start+1,end);//后续元素递归全排列
temp=buf[start];//将交换后的数组还原
buf[start]=buf[i];
buf[i]=temp;
}
}
}
}
也可以以下方式实现,注意要修改NUM和MAIN中的数组
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Test {
//将NUM设置为待排列数组的长度即实现全排列
private static int NUM = 4;
/**
* 递归算法:将数据分为两部分,递归将数据从左侧移右侧实现全排列
*
* @param datas
* @param target
*/
private static void sort(List datas, List target) {
if (target.size() == NUM) {
for (Object obj : target)
System.out.print(obj);
System.out.println();
return;
}
for (int i = 0; i < datas.size(); i++) {
List newDatas = new ArrayList(datas);
List newTarget = new ArrayList(target);
newTarget.add(newDatas.get(i));
newDatas.remove(i);
sort(newDatas, newTarget);
}
}
public static void main(String[] args) {
String[] datas = new String[] { "a", "b", "c", "d"};
sort(Arrays.asList(datas), new ArrayList());
}
}
2.学会GOOGLE,多GOOGLE,比如你的这个可以用这个关键字JAVA 全排列
热心网友
1楼扯淡,二楼网上复制的,不完全符合要求,3楼的有些问题,不能输出所有的不是贬低各位
这是我在2楼基础上改的
package main;
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
String s="abcdaaa";
ger(split(s,true));
}
/**
*
* @param target
* @param isDeleteRepeat 是否去掉重复的字母例如abcda去重则为abcd不去重则为abcda即2个a当做不同的字母看
* @return
*/
public static List<String> split(String target,boolean isDeleteRepeat){
List<String> list=new ArrayList<String>();
for(int i=0;i<target.length();i++){
if(!(isDeleteRepeat&&list.contains(String.valueOf(target.charAt(i))))){
list.add(String.valueOf(target.charAt(i)));}
}
return list;
}
public static List<String> ger(List<String> string){
List<String> list=new ArrayList<String>();
for(int i=1;i<=string.size();i++){
sort(string,new ArrayList<String>(),i);
}
return list;
}
private static void sort(List datas, List target,int num) {
if (target.size() == num) {
for (Object obj : target)
System.out.print(obj);
System.out.println();
return;
}
for (int i = 0; i < datas.size(); i++) {
List newDatas = new ArrayList(datas);
List newTarget = new ArrayList(target);
newTarget.add(newDatas.get(i));
newDatas.remove(i);
sort(newDatas, newTarget,num);
}
}
}
热心网友
public class test {
public static void main(String[] args) {
String str = "12";
char a[] = str.toCharArray();
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
mm(a,i);
}
}
public static void mm(char a[], int c) {
for (int i = 0; i < a.length; i++) {
if(i!=c){
System.out.println(a[c] +""+ a[i]);
}
}
}
}
热心网友
public void bond(String str) {
char[] aa = str.toCharArray();
for(int i = 0; i < aa.size(); i ++){
for(int j = 0; j < aa.size(); j ++){
if (aa[i] == aa[j])
System.out.println(String.valueOf(aa[i]));
else
System.out.println(String.valueOf(aa[i]) + String.valueOf(aa[j]));
}
}
}
由于没有编译工具,不能保证无错...
热心网友
1楼正解~!