登录
  • #刷题

字符串的全排列,用递归,没看懂,思路和题目都在这儿,求解答

TonyJang
1439
3
[postbg]bg3.png[/postbg]假设str=abcd,输出这四个字母的全部排列方式:

code:
public class Permutation{[br][/br][br][/br]private boolean[] used;[br][br][/br]private StringBuilder out=new StringBuilder();[br][/br][br][/br]private final String in;[br][/br][br][/br]public Permutation(final String str){[br][/br][br][/br]in=str;[br][/br][br][/br]used=new boolean[in.length()];[br][/br][br][/br]public void permute(){[br][/br][br][/br]if(out.length()==in.length()){[br][/br][br][/br]System.out.println(out);[br][/br][br][/br]}[br][/br][br][/br]for(int i=0;i<in.length();++i){[br][/br][br][/br]if(used[i]) continue;[br][/br][br][/br]out.append(in.charAt(i));[br][/br][br][/br]used[i]=true;[br][/br][br][/br]permute();[br][/br][br][/br]used[i]=false;[br][/br][br][/br]out.setLength(out.length()-1);[br][/br][br][/br]}[br][/br][br][/br]}[br][/br][br][/br]}[br][/br][br][/br]}我的思路,第七步除了问题,以abcd为例:[br][/br][br][/br]1)out=a,used[0]=true;[br][/br][br][/br]2)out=ab,used[1]=true;[br][/br][br][/br]3)out=abc,used[2]=true;[br][/br][br][/br]4)out=abcd,used[3]=true;[br][/br][br][/br]5)再进入permute(),执行if循环,输出abcd,return回上一层,即4)[br][/br][br][/br]6)out=abcd,used[3]=false,out.length()=3[br][/br][br][/br]7)for循环结束之后进入3)//不知道对不对?[/i][/i][/i]
3条回复
热度排序

发表回复