欢迎光临散文网 会员登陆 & 注册

字符串全排列

2023-06-09 10:05 作者:码头薯条Pro  | 我要投稿

题目说明

输入一个字符串,按字典序打印出该字符串中字符的所有排列。 

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

练习地址

牛客 https://www.nowcoder.com/practice/fe6b651b66ae47d7acce78ffdd9a96c7 

力扣 https://leetcode.cn/problems/permutations/


代码

public class 字符串全排列 {

    public static void main(String[] args) {

        String ab = "abc";

        String  a="AaaaAA";

        String s = a.toLowerCase();

        Permutation(ab);

    }


    static ArrayList<String> res = new ArrayList<>();


    public static ArrayList<String> Permutation(String str) {

        char[] tmp = str.toCharArray();

        reserve(tmp, 0, tmp.length);

        ArrayList<String> ans = new ArrayList<>(new HashSet<>(res));

        Collections.sort(ans);

        return ans;

    }


    public static void reserve(char[] arr, int index, int length) {

        if (index == length) {

            System.out.println(change(arr));

            res.add(change(arr));

            return;

        }

        for (int i = index; i < length; i++) {

            char tem = arr[i];

            arr[i] = arr[index];

            arr[index] = tem;

            reserve(arr, index + 1, length);

            tem = arr[i]; // 其实就是去为了消除当前层去递归的时候的进行交换字符的影响,

            //如果不消除的话,那么就会造成原index位置的字符发生变化

            arr[i] = arr[index];

            arr[index] = tem;

        }

    }


    public static String change(char[] arr) {

        StringBuilder ans = new StringBuilder();

        for (int i = 0; i < arr.length; i++) {

            ans.append(arr[i]);

        }

        return ans.toString();

    }

}




字符串全排列的评论 (共 条)

分享到微博请遵守国家法律