java编写字符串全组合输出

本文介绍了一个用于生成字符串所有可能排列的Java程序。该程序通过递归实现,能够处理任意长度的字符串,并输出所有可能的排列组合。设计思路包括顺序选取字符、使用数组拷贝保持其他元素位置不变等技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如“abc”输出结果为:“abc”,“acb”,“bac”,“bca”,“cab”,“cba”

public class AllCombString {
public static int t;//组合个数

public static void main(String[] args) {
String str = "123";
char[] c = str.toCharArray();
println(c)
t++;
allCombString(c,0);
System.out.println(t);
}
public static void allCombString(char[] c,int s){
int l = c.length;
if(l-s==2){
char temp = c[l-1];
c[l-1] = c[l-2];
c[l-2] = temp;
println(c);
t++;
}
else{
for(int i=s;i<l;i++){
moveToHead(c,i,s);
char ct[] = new char[l];
System.arraycopy(c, 0, ct, 0, l);//保持其他元素位置不变
allCombString(ct,s+1);
}
}
}

public static void moveToHead(char[] c,int id,int s){
if(id>s&&id<c.length){
char temp = c[id];
for(int i=id;i>s;i--){
c[i] = c[i-1];
}
c[s] = temp;
println(c);
t++;
}
}

public static void println(char[] c){
System.out.println(new String(c));
}
}
输出结果:

123
132
213
231
321
312
6

设计思路:

1、n个字符,顺序选取其中第1个;

2、在剩下的n-1个字符中,再选取其中的第1个;

3、若剩余的字符只剩下2个,则这两个字符交换位置;若不是,则继续第2步。

4、这是一个典型的递归,无论有多少个字符,到最后只需交换最后两个字符即可。

5、为了能按顺序选取字符(因为递归之后会影响字符的顺序,如:“abcd”经过第一轮递归之后变成“adbc”,这时再执行第2步的话,取到的字符是“d”,而不是“b”),所以这里使用了数组拷贝,for循环不受递归的影响。(这个问题想了老半天,暂时只能用这种方法,即使效率比较低)。

6、组合的个数是字符个数的阶层,如“abc”,组合个数为3!=6

不知道大家有没有更好的方式
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值