字符串全排列c语言递归,Java递归实现字符串全排列

public class AllStrings {

public static void main(String[] args) {

AllStrings as = new AllStrings();

char []chs={'a','c','d'};

System.out.println("chs的全排列如下:");

as.getAllStrings(chs, 0);

}

public void getAllStrings(char []chs,int from)

{

/**

* 数组为空,直接返回

*/

if(chs==null||chs.length==0)

{

return;

}

/**

* 基本思想:递归

* 递归流程-->要从下标from开始,输出从from到chs.length-1之间的字符的全排列,分成三步

* 1. 从from开始遍历chs,让被遍历到的字符跟排在第一位的字符交换位置

* 2. 递归取from+1-->chs.length-1之间的字符的全排列

* 3. 在把第一步被调换位置的两个字符还原。

*

* 直到,从from开始的游标走到chs.length-1,则说明找到一组全排列,

* 从from开始输出这组全排列。

*/

if(from

for(int index=from;index

{

this.swap(chs, from, index);

getAllStrings(chs, from+1);

this.swap(chs, from, index);

}

}

else{

for(int index=0;index<=chs.length-1;index++)

{

System.out.print(chs[index]);

}

System.out.println();

}

}

private void swap(char[]arrs,int sIndex,int bIndex)

{

char tmp = arrs[sIndex];

arrs[sIndex] = arrs[bIndex];

arrs[bIndex] = tmp;

}

}

测试结果如下:

0818b9ca8b590ca3270a3433284dd417.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值