剑指offer27_字符串的排列

  题目描述

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。

输入描述:

输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。

解决:思路是用的回溯法,每层锁定一个。

这里有讲解很清楚的一篇公众号文章(如侵删)https://mp.weixin.qq.com/s?__biz=MzI5MzYzMDAwNw==&mid=2247484748&idx=2&sn=4dd588af707d7a598206b090083f9a18&chksm=ec6e7c14db19f502489081a1aa1be260e288af7ef3f4c7dc6fddab1186cd34d0a93d750993bc&token=1812131085&lang=zh_CN#rd

具体代码及注释如下:

import java.util.ArrayList;
import java.util.TreeSet;
public class Solution {
   ArrayList<String> result = new ArrayList<>();
   TreeSet<String> set = new TreeSet<>();//使用一个TreeSet保证有序和无重复
   public ArrayList<String> Permutation(String str) {
       char [] strArray = str.toCharArray();
       Permutation(strArray,0);//参数不同是重载
       while(!set.isEmpty())
           result.add(set.pollFirst());//set.pollFirst()获取并移除第一个(最低)元素
       //利用TreeSet存储字符串,消除重复,最后以while循环赋给ArrayList

       return result;
   }
   public void Permutation(char [] strArray,int index)
   {
       if(index == strArray.length - 1)
       {//这里的话就是每当到了最后一个字符的时候,就添加当前字符串,也是递归出口

       //因为是strArray中元素互换得到的新字符串,所以直接把strArray转换成string类,存起来就好
           set.add(String.valueOf(strArray));
       }else{
           for(int i=index;i<strArray.length;i++)
           {
               swap(strArray,index,i);
               Permutation(strArray,index+1);//递归了下方所有层,递归到底的时候已添加字符串
               swap(strArray,index,i);//回到上一层初始状态,再去交换index与i+1
           }
       }
   }
   public void swap(char [] strArray,int i,int j)
   {
       char ch = strArray[i];
       strArray[i] = strArray[j];
       strArray[j] = ch;
   }
}

另外一点注意事项:

方法重载是指同一个类中的多个方法具有相同的名字,但这些方法具有不同的参数列表,即参数的数量或参数类型不能完全相同

方法重写是存在子父类之间的,子类定义的方法与父类中的方法具有相同的方法名字,相同的参数表和相同的返回类型 
      注: 
        (1)子类中不能重写父类中的final方法 

        (2)子类中必须重写父类中的abstract方法 

转换为string类的方法总结:

1、toString,需要保证调用这个方法的类、方法、变量不为null,否则会报空指针。

2、String.valueOf。这个方法在使用的时候是有些特殊的。一般情况下,如果是确定类型的null传入,返回的是字符串“null”,而如果直接传入null,则会发生错误。

3、(String) 字符串类型强转。需要保证的是类型可以转成String类型。

猜你喜欢

转载自blog.csdn.net/lilililililydia/article/details/88920762