This class represents an iterator over over all possible unique combinations (with permutations, i.e. {0,1} and {1,0} both will appear in the iteration) of {@code k} numbers, which can be chosen from the set of {@code n} numbers, numbered in the order0,1,2,..., {@code n}. The total number of such combinations will be {@code n!/(n-k)!}.
For example, for {@code k=2} and {@code n=3}, it will iterate over the following arrays: [0,1], [1,0], [0,2], [2,0], [1,2], [2,1].
The iterator is implemented such that each next combination will be calculated only on the invocation of method {@link #next()}.
Note: method {@link #next()} returns the same reference on each invocation.So, if it is needed not only to obtain the information from {@link #next()}, but also save the result, it is necessary to clone the returned array.
Inner implementation of this class is simply uses the combination of {@link IntCombinationsGenerator}and {@link IntPermutationsGenerator}.
@author Dmitry Bolotin
@author Stanislav Poslavsky
@see IntCombinationsGenerator
@see IntPermutationsGenerator
@since 1.0