字符串的排列

字符串的排列

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

字符串的排列

思路分析:

  • 思路其实和查找路径的思路是一样的,就是不断的拼接子路径(其实是子排序)
    举个例子来说:string str = "abc" ;
    那么进行三轮 第一轮是

    • a ,bc
    • a ,b , c
      a ,c , b
    • a + bc
      a + cb
  • 之后就是把b提出来继续的操作,如果是重复的话,直接让他跳过就好了

    public ArrayList<String> Permutation(String str) {
    
          ArrayList<String> res = new ArrayList<>() ;
          if (!str.equals("")){
              if (str.length()>1){
                  StringBuilder stringBuilder = new StringBuilder(str) ; //转成stringbuilder方便操作
                  for (int i=0;i<stringBuilder.length();i++){ //遍历取字符的各个情况
                      if (i+1<stringBuilder.length()&&stringBuilder.charAt(i)==stringBuilder.charAt(i+1)){ //重复的情况
                          continue;
                      }else {
                          String temp = String.valueOf(stringBuilder.charAt(i));
                          StringBuilder nstr = new StringBuilder(str) ;
                          nstr.delete(i,i+1);
                          ArrayList<String> preres = Permutation(nstr.toString());
                          for (int j=0;j<preres.size();j++){ //取到子路径的集合
                              res.add(temp+preres.get(j)); //用当前的str和子路径的集合一一拼接就好
                          }
                      }
                  }
              }else if(str.length()==1) {
                  res.add(str);
                  return res ;
              }
          }else {
              res.clear();
          }
          return res ;
      }
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务