Skip to content

Instantly share code, notes, and snippets.

@Subuday77
Last active August 5, 2020 10:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Subuday77/278abf7b4652ba0fb954555189338e7a to your computer and use it in GitHub Desktop.
Save Subuday77/278abf7b4652ba0fb954555189338e7a to your computer and use it in GitHub Desktop.
package com.local;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> elements = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));
if (elements.size() > 10) {
System.out.println("Sorry, we are not working with more, than 10 elements.");
System.exit(1);
}
long numberOfResults = factorialCount(elements.size());
long repeatedNumbers = factorialCount(elements.size() - 1);
int[][] array = new int[(int) (repeatedNumbers * elements.size())][elements.size()];
System.out.println("Number of combinations: " + numberOfResults);
for (int i = 0; i < elements.size(); ++i) {
int pos = 0;
int index = 0;
for (int j = 0; j < (repeatedNumbers * elements.size()); ++j) {
while (!uniqueCheck(array, j, elements.get(pos))) {
++pos;
if (pos >= elements.size()) {
pos = 0;
}
}
++index;
array[j][i] = elements.get(pos);
long counter = factorialCount((elements.size() - 1) - i) - index;
if (counter == 0) {
++pos;
if (pos >= elements.size()) {
pos = 0;
}
index = 0;
}
}
}
printArray(elements, repeatedNumbers, array);
}
private static long factorialCount(long n) {
if (n <= 2) {
return n;
}
return n * factorialCount(n - 1);
}
private static void printArray(List<Integer> elements, long repeatedElements, int[][] array) {
for (int i = 0; i < (repeatedElements * elements.size()); ++i) {
for (int j = 0; j < elements.size(); ++j) {
System.out.print(array[i][j]);
}
System.out.println();
}
}
private static boolean uniqueCheck(int[][] array, int j, int elementToCheck) {
String toCheck = "";
for (int i = 0; i < array[j].length; ++i) {
toCheck = String.valueOf(array[j][i]);
if (toCheck.equals(String.valueOf(elementToCheck))) {
return false;
}
}
return true;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment