全排列

作者: lqsss | 来源:发表于2018-04-25 09:29 被阅读0次

题目

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

思想

全排列
笔试面试算法经典--全排列算法-递归&字典序实现(Java)

代码

public class Permutation {
    ArrayList<String> res = new ArrayList<>();

    public ArrayList<String> Permutation(String str) {
        if (str.length() == 0) {
            return new ArrayList<>();
        }
        permutationProcess(str.toCharArray(), 0, str.length() - 1);
        Collections.sort(res);
        return res;
    }

    /**
     * 全排列
     * @param chars
     * @param start
     * @param end
     */
    private void permutationProcess(char[] chars, int start, int end) {
        //递归边界条件:只剩下最后一个元素
        if (start == end) {
            res.add(String.valueOf(chars));
            return;
        }
        for (int i = start; i <= end; i++) { //固定第一个(start)位置,就会有n种可能
            if (i == start || chars[start] != chars[i]) { //去掉重复的可能情况
                swap(chars, i, start);  //交换当前下标到start位置
                permutationProcess(chars, start + 1, end); //全排列剩下字符串
                swap(chars, i, start); //再次交换,将他们还原,为下次交换首位置做准备
            }
        }
    }

    private void swap(char[] chars, int start, int end) {
        char tmp = chars[start];
        chars[start] = chars[end];
        chars[end] = tmp;
    }
}

相关文章

  • 全排列与字典序

    全排列 递归实现全排列; 首先来说递归算法实现全排列: 例如,对于{1,2,3,4}的例子进行全排列,其可以分解...

  • 全排列

    求全排列最简单的就是递归了123 的全排列共有 6 个, 123 的全排列等于以 1 开头 23 的全排列, 加上...

  • 全排列

    题目 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排...

  • 全排列

    递归的版本image.png

  • 全排列

  • 全排列

  • 全排列

    给出一个列表[1,2,3],其全排列为: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,...

  • 全排列

    给定一个数字列表,返回其所有可能的排列。

  • 全排列

    给定一个没有重复数字的序列,返回其所有可能的全排列。 示例: 输入: [1,2,3]输出:[[1,2,3],[1,...

  • 全排列

    两种方法:第一种方法:递归: 从集合中依次选出每一个元素,作为排列的第一个元素,然后对剩余的元素进行全排列,如此递...

网友评论

      本文标题:全排列

      本文链接:https://www.haomeiwen.com/subject/zbsthftx.html