牛客网刷题之字符串的排列

来源:互联网 发布:乐视投屏 for mac 编辑:程序博客网 时间:2024/05/21 04:24

题目描述:

这里写图片描述

解题思路:

  先固定一个字符,然后依次将后面的字符进行交换,当交换的字符到达字符串末尾就完成一次循环,接着就是下一个字符……如下图:
这里写图片描述
显然,我们可以使用递归的方法:

题解:

public ArrayList<String> Permutation(String str) {        ArrayList<String> res = new ArrayList<>();        if (str == null) {            return null;        }        PermutationHlper(str.toCharArray(), 0, res);        Collections.sort(res);        return res;    }    private void PermutationHlper(char[] charArray, int i,            ArrayList<String> list) {        if (i == charArray.length - 1) {            list.add(String.valueOf(charArray));        } else {            for (int j = i; j < charArray.length; j++) {                if (i == j || charArray[i] != charArray[j]) {                    swap(charArray, i, j);                    PermutationHlper(charArray, i + 1, list);                    swap(charArray, i, j);// 复位                }            }        }    }    private void swap(char[] cs, int i, int j) {        char temp = cs[i];        cs[i] = cs[j];        cs[j] = temp;    }

ac结果:

这里写图片描述

0 0
原创粉丝点击