码农小汪-剑指Offer之25 -字符串的排列(全排列)

来源:互联网 发布:mac如何压缩文件 编辑:程序博客网 时间:2024/06/05 22:46

题目描述

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

输入描述:

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

其实就是一个全排序,可能有重复的字母,需要不有重复的容器,我选择了hashset这个容器,应为我们的容器之间可以相互的转换的addAll就行啦。排序使用系统的函数。

我处理的时候,采用DFS深度遍历可能发现的所有的情况,这样我们就可以把所有的都查找到。然后就是输出啦!
DFS遍历的时候,应该注意出口,以及是否可以进行剪纸技术

代码

package JianzhiOffer;import java.util.ArrayList;import java.util.Collections;import java.util.HashSet;public class Slution25 {    public HashSet<String> result = new HashSet<>();// 不一样的    public Integer flag[];// 标记字段    public char steps[];// 每一步走过的情况    /**     * DFS遍历所有的情况     *      * @param str     * @return     */    public ArrayList<String> Permutation(String str) {        ArrayList<String> list = new ArrayList<String>();        if (str == null || str.isEmpty()) {            return list;        }        char arry[] = str.toCharArray();        flag = new Integer[arry.length];        steps = new char[arry.length];        for (int i = 0; i < flag.length; i++) {            flag[i] = 0;        }        dfs(arry, 0);        list.addAll(result);// 从其他集合中添加        Collections.sort(list);// 排序        return list;    }    /**     * 遍历完我们的每一种可能,出口就是长度为length; 可能会出现重复的字母!     *      * @param array     * @param step     */    public void dfs(char[] array, int step) {        if (step == array.length) {            String str = "";            for (int i = 0; i < array.length; i++) {                str += steps[i];            }            result.add(str);            return;        }        // 遍历每种可能        for (int i = 0; i < array.length; i++) {            if (flag[i] == 0) {// 没有使用过                steps[step] = array[i];// 第几步,使用了当前的线程                flag[i] = 1;                dfs(array, step + 1);                // 走完最后一步,回来退一步                flag[i] = 0;            }        }    }    public static void main(String[] args) {        Slution25 test = new Slution25();        System.out.println(test.Permutation("abcc").toString());    }}
0 0
原创粉丝点击