字符串的排列(剑指offer 28题及课后题拓展)

2020-02-26  本文已影响0人  抬头挺胸才算活着
import java.util.HashSet;
import java.util.Scanner;

public class Permutation {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        if(sc.hasNextLine()) {
            String string = sc.nextLine();
            int count = numOfPermutation(string);
            System.out.println(count);
        }
    }

    public static int numOfPermutation(String string){
        if(string==null)
            return 0;

        HashSet<String> set = new HashSet<>();
        numOfPermutation(new StringBuilder(string), set, 0);
        return set.size();
    }

    public static void numOfPermutation(StringBuilder sb, HashSet<String> set, int startIndex){
        if(startIndex==sb.length()-1) {
            set.add(sb.toString());
        } else {
            for(int i=startIndex;i<sb.length();i++) {
                swap(sb, startIndex, i);
                numOfPermutation(sb, set, startIndex+1);
                swap(sb, startIndex, i);
            }
        }
    }

    public static void swap(StringBuilder sb, int i, int j){
        char ichar = sb.charAt(i), jchar=sb.charAt(j);
        sb.setCharAt(i, jchar);
        sb.setCharAt(j, ichar);
    }
}

    public static void permutation2(String string) {
        permutation2(string.toCharArray(), 0);
    }

    public static void permutation2(char[] charArray, int startIndex) {
        for(int i=startIndex; i<charArray.length; i++) {
            utils.swap(charArray, startIndex, i);
            System.out.print(new String(Arrays.copyOf(charArray, startIndex+1))+",");
            utils.swap(charArray, startIndex, i);
        }
    }
    public static void combination(String string){
        for(int i=0;i<string.length();i++) {
            Queue<Character> queue = new LinkedList<>();
            combination(string.toCharArray(), 0,i+1, queue);
        }
    }

    public static void combination(char[] charArray, int fromIndex, int numCharsTobeSelected, Queue<Character> queue) {
        if (numCharsTobeSelected == 0) {
            for (Character ch : queue) {
                System.out.print(ch);
            }
            if(queue.size()>0)
                System.out.println();
            return;
        }

        int NumCharsLeft = charArray.length - fromIndex;
        if(NumCharsLeft < numCharsTobeSelected){
            return;
        }

        queue.add(charArray[fromIndex]);
        combination(charArray, fromIndex+1, numCharsTobeSelected - 1, queue);
        queue.poll();

        combination(charArray, fromIndex+1, numCharsTobeSelected, queue);
    }
上一篇下一篇

猜你喜欢

热点阅读