遇到一个难题,你知道如何显示出我输入的字母的所有排列组合吗?

yoshubom 2006-12-26 04:33:58
遇到一个难题,你知道如何显示出我输入的字母的所有排列组合吗?

例如:我输入 ABC 它就会显示

ABC
ACB
BAC
BCA
CAB
CBA 据说是使用递归,但是我没有想到办法

...全文
286 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lanseliuying 2007-01-14
  • 打赏
  • 举报
回复
不用递归的算法:
public class Test
{

public static void main(String args[])
{
char[] a={'a','b','c','d'};
char[] b={'a','b','c','d'};
char temp;
for(int j=0;j<a.length;j++)
{
for (int i=a.length-1;i>0 ;i-- )
{
temp=a[i-1];
a[i-1]=a[i];
a[i]=temp;
if (a!=b)
{
System.out.println(a);
}
}
}
}
}
健之 2007-01-14
  • 打赏
  • 举报
回复
我的程序,按照递归算法弄,但显示花了我不少时间,结果却很简单。如下:
import java.util.*;
public class test {
public static void main(String[] arg) {
Scanner r=new Scanner(System.in);
String s=r.nextLine();
Pailie(s,"");
}
static void Pailie(String s, String p) {
if(s.length()<1) System.out.println(p+s);
else {
for(int i=0; i<s.length(); i++) {
Pailie(s.substring(1),p+s.substring(0,1));
s=s.substring(1)+s.substring(0,1);
}
}
}
}
结果:
ABC(这是输入行)
ABC
ACB
BCA
BAC
CAB
CBA
liulang203 2007-01-13
  • 打赏
  • 举报
回复
有点乱.不要介意
package com.test;

import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class TestMyArray {
private int[] in;
private Set<String> set;



public TestMyArray(int l) {
int[] sin = {1 , 2 , 2 , 3 , 4 , 5};
set = new HashSet<String>() ;
in = sin;

}

public void getlist() {
int langth = in.length;
list(langth, langth);
Iterator it = set.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
System.out.println(set.size());

}

public void list(int length, int alllangth) {
if (length == 1) {
// print();
return;
}
if (length == 2) {
checkprint();
if(changpn(alllangth - length, alllangth))
checkprint();
return;
}

for (int i = 0; i < length; i++) {
list(length - 1, alllangth);
changpn(alllangth - length, alllangth);
}
}
public void checkprint(){
print();

}
public void print() {
StringBuffer bu = new StringBuffer() ;
for (int i = 0; i < in.length; i++)
bu.append(in[i]) ;
set.add(bu.toString()) ;
}

public boolean changpn(int index, int alllangth) {


int st = index + 1;
for(int i = st ; i < alllangth ; i ++ ){
for(int j = i + 1; j < alllangth ; j ++){
if(in[i] > in[j]){
int va = in[i];
in[i] = in[j] ;
in[j] = va ;
}
}
}
int temp;
for (temp = index + 1; temp < alllangth; temp++) {
if (in[index] < in[temp]) {
int v = in[index];
in[index] = in[temp];
in[temp] = v;
break;
}
}
if(temp == alllangth) return false ;
return true;
}

public static void main(String[] args) {
TestMyArray tt = new TestMyArray(5);
long o = new Date().getTime();
tt.getlist();
long n = new Date().getTime();
System.out.println(n - o);
}


}
nothing10191 2006-12-26
  • 打赏
  • 举报
回复
这道题用动态规划的思想应该可以解决~~具体的思想是怎样的,你找找说算法的书吧,里面有说~~或者你看看strassen算法的思想也可以~
yoshubom 2006-12-26
  • 打赏
  • 举报
回复
public class PermABC {
public static void main(String []args) {
/*
if (args.length == 0) {
System.out.println("error");
} else {
char[] arr = args.toCharArray();

perm(arr,0,23);
}
*/

String str = "abc";
//System.out.println(str.length());
char[] arr = str.toCharArray();
perm(arr,0,str.length());
}


static void perm(char[] list,int k,int m) {
int i;
if (k == m) {

for(i=0; i<m; i++)
System.out.print(list[i]);
System.out.println("");

} else {

for(i=k; i<m; i++) {
swap(list, k, i);
perm(list, k + 1, m);
swap(list, k, i);
}
}
}

static void swap(char[] arr, int i, int k){
char temp;
temp = arr[i];
arr[i] = arr[k];
arr[k] = temp;
}
}

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧