JZ27:字符串的排列

字符串的排列

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

  • 思路:
    每次都把一个数固定在前面,让后面的数递归地进行全排列,这样每个数都固定过以后就能找出所有排列。关键的地方在于,我们把每个数固定在前面并让后面的进行全排列完毕以后,要恢复原来的状态,也就需要交换回来。
    图片说明

    import java.util.ArrayList;
    import java.util.Collections;
    public ArrayList<String> Permutation(String str) {
             ArrayList<String> ans=new ArrayList<String>();//所有排列的可能都在这里
              if(str!=null||str.length()>0){
                  help(0,str.toCharArray(),ans);
                  Collections.sort(ans);
              }
              return ans;
          }
          public static void help(int i,char[] cha,ArrayList<String> ans){
              if(i==cha.length-1){
                  String val = String.valueOf(cha);
                  if(!ans.contains(val)){
                      ans.add(val);
                  }
              }else{
                  for(int j=i;j<cha.length;j++){
                      swap(i,j,cha);//依次选一个数固定住
                      help(i+1,cha,ans);//让后面的进行全排列
                      swap(i,j,cha);//恢复原来的模样,回溯关键
                  }
              }
    
          }
          public static void swap(int i,int j,char[] cha){
              char temp=cha[i];
              cha[i]=cha[j];
              cha[j]=temp;
          }
    }
剑指Offer题解 文章被收录于专栏

剑指Offer-Java版本题解

全部评论

相关推荐

05-09 14:45
门头沟学院 Java
点赞 评论 收藏
分享
05-05 21:45
已编辑
广州大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务