简体   繁体   中英

How to save permutation in a Set Java

I have this method that prints my permutations of a Set I'm giving with my parameters. But I need to save them in 2 separate sets and compare them. So, for instance I have [5,6,3,1] and [5,6,1,3], by adding them in two separate BST, I can compare them by using the compareTo function to check whether their level order is the same. But I am having trouble with saving these permutations from my method into a set in my main. Does anyone know how to save these into a set?

What I have now:

import edu.princeton.cs.algs4.BST;

import java.util.*;

public class MyBST {
    public static void main(String[] args) {
        int size = 4;
        BST<Integer, Integer> bst1 = new BST<Integer, Integer>();
        BST<Integer, Integer> bst2 = new BST<Integer, Integer>();
        Random r = new Random();
        Set<Integer> tes = new LinkedHashSet<>(size);
        Stack<Integer> stack = new Stack<>();
        while (tes.size() < size) {
            tes.add(r.nextInt(10));
        }
        System.out.println(tes);
        System.out.println("possible combinations");
        Iterator<Integer> it = tes.iterator();
        for (int i = 0; i < tes.toArray().length; i++) {
            Integer key = it.next();
            bst1.put(key, 0);
        }
        combos(tes, stack, tes.size());
    }
}

and here is the method I use:

public static void combos(Set<Integer> items, Stack<Integer> stack, int size) {
    if (stack.size() == size) {
        System.out.println(stack);
    }
    Integer[] itemz = items.toArray(new Integer[0]);
    for (Integer i : itemz) {
        stack.push(i);
        items.remove(i);
        combos(items, stack, size);
        items.add(stack.pop());
    }
}

And this is the output:

在此处输入图像描述

I'm not sure if I understood your idea but maybe this will help:

Yours combos method will return set of all permutations (as Stacks)

...
        for (int i = 0; i < tes.toArray().length; i++) {
            Integer key = it.next();
            bst1.put(key, 0);
        }
        Set<Stack<Integer>> combos = combos(tes, stack, tes.size()); //there you have set with all Stacks
    }
}

    public static Set<Stack<Integer>> combos(Set<Integer> items, Stack<Integer> stack, int size) {
    Set<Stack<Integer>> set = new HashSet<>();

    if(stack.size() == size) {
        System.out.println(stack.to);
        set.add((Stack) stack.clone());
    }

    Integer[] itemz = items.toArray(new Integer[0]);
    for(Integer i : itemz) {
        stack.push(i);
        items.remove(i);
        set.addAll(combos(items, stack, size));
        items.add(stack.pop());
    }
    return set;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM