两种递归解决思路

字符串的排列

http://www.nowcoder.com/questionTerminal/fe6b651b66ae47d7acce78ffdd9a96c7

本题采用两种递归方法,大家有何理解???

import java.util.ArrayList;
import java.util.Collections;

/**

  • 题目:字符串的排列
  • 描述:输入一个字符串,按字典序打印出该字符串中字符的所有排列。
  • 例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba
  • 思路:参考别的思路 ,递归
  • /
    public class array27 {
    public static void main(String[] args) {
      String string="a";
     ArrayList<String> arrayList=Permutation( string);
      for(int i=0;i<arrayList.size();i++) {
          System.out.println(arrayList.get(i));
      }
    }
public static ArrayList<String> Permutation(String str) {
    ArrayList<String> arrayList=new ArrayList<String>();
    if(str==null || str.length()==0)
        return arrayList;
    char[] c=str.toCharArray();
    perm(c,arrayList,0);
    Collections.sort(arrayList);
    return arrayList;
}
// 递归方法一:运行时间:138ms     占用内存:12244k
public static void perm(char[] c,ArrayList<String> arrayList,int start){
    if(c==null || start==c.length-1)
        if(!arrayList.contains(String.valueOf(c)))
            arrayList.add(String.valueOf(c));
    for(int i=start;i<c.length;i++) {
        char temp=c[i];
        c[i]=c[start];
        c[start]=temp;
        perm(c,arrayList,start+1);
        temp=c[i];
        c[i]=c[start];
        c[start]=temp;

    }
}
//递归方法二: 运行时间:130ms   占用内存:12332k
public static void perm1(char[] c,ArrayList<String> arrayList,int start){
    if(c==null || start>c.length-1)
        return;
    for(int i=start;i<c.length;i++) {
        char temp=c[i];
        c[i]=c[start];
        c[start]=temp;
        if(!arrayList.contains(String.valueOf(c)))
            arrayList.add(String.valueOf(c));
        perm(c,arrayList,start+1);
        temp=c[i];
        c[i]=c[start];
        c[start]=temp;

    }
}

}

全部评论

相关推荐

03-26 13:44
南华大学 Java
在看面经的花生米很野蛮:这种情况下你当然要回答,你也是吗!!!!我超喜欢他的XXXXX
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务