java字符串全排列递归_一道字符串全排列问题,用递归实现

packagedigui;importjava.util.ArrayList;importjava.util.List;publicclassStringArrange{publicstaticListarrange(Stringstr){Listresults=newArrayList()...

package digui;

import java.util.ArrayList;

import java.util.List;

public class StringArrange{

public static List arrange(String str){

List results =new ArrayList();

arrange(str,"",results);

return results;

}

public static void arrange(String notarranged,String arranged,List results){

if(notarranged.length()==0){

System.out.println(arranged);

results.add(arranged);

return ;

}else{

//从notarranged 取一个字符 给 arranged

for( int i=0;i

StringBuilder sb =new StringBuilder(notarranged);

String chart =""+sb.charAt(i);

notarranged=sb.deleteCharAt(i).toString();

arranged =arranged+chart;

arrange(notarranged,arranged,results);

}

}

}

public static void main(String[] args) {

List results =arrange("ab");

}

}

我的思路是An = n*A(n-1)

An的全排列 =

for 从未排列的元素中 取一个

,然后对剩下的进行全排列 A(n-1)

终止条件是剩下的元素为空

我的算法到底哪里出错了?

我调试时 最上面的一层根本不循环。

原来我的问题出在

for( int i=0;i

StringBuilder sb =new StringBuilder(notarranged);

String chart =""+sb.charAt(i);

String newnotarranged=sb.deleteCharAt(i).toString();

String newarranged =arranged+chart;

arrange(newnotarranged,newarranged,results);

}

}

newnotarranged newarranged 必须要重新命名,否则 for 循环的值 在循环体内被改变,导致下次循环条件不满足了。

这提醒了我们for循环的条件边界应该是不变的。就是不能被方法体修改,而i值可以变化

展开

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值