字符串的全排列

题目描述

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

代码实现(Java)

import java.util.ArrayList;
import java.util.TreeSet;
public class Solution {
    public ArrayList<String> Permutation(String str) {
        ArrayList<String> resList = new ArrayList<>();
        if(str == null || str.length() == 0) return resList;
        TreeSet<String> set = new TreeSet<>(); // TreeSet:默认使用元素的自然顺序进行排序
        char[] charArr = str.toCharArray();
        permutation(charArr, 0, set);
        resList.addAll(set);
        return resList;
    }

   private void permutation(char[] charArr, int begin, TreeSet<String> set){
        if(charArr == null || charArr.length == 0 || begin < 0 || begin >= charArr.length) return;
        //注意:begin == charArr.length - 1
        if(begin == charArr.length - 1) set.add(String.valueOf(charArr));
        else{
            for(int i = begin;i < charArr.length;i++){
                swap(charArr, i, begin);
                permutation(charArr, begin + 1, set);
                swap(charArr, i, begin);
            }
        }
    }

    private void swap(char[] charArr, int a, int b){
        char tmp = charArr[a];
        charArr[a] = charArr[b];
        charArr[b] = tmp;
    }

}

注:题目及其解法均来自牛客网–剑指offer

猜你喜欢

转载自blog.csdn.net/tkzc_csk/article/details/80221516
今日推荐