nextPermutation

fnbool nextPermutation(alias less = "a < b", BidirectionalRange)(BidirectionalRange range) if (isBidirectionalRange!BidirectionalRange && hasSwappableElements!BidirectionalRange)
  • Permutes range in-place to the next lexicographically greater
  • permutation.
  • The predicate less defines the lexicographical ordering to be used on
  • the range.
  • If the range is currently the lexicographically greatest permutation, it is
  • permuted back to the least permutation and false is returned. Otherwise,
  • true is returned. One can thus generate all permutations of a range by
  • sorting it according to less, which produces the lexicographically
  • least permutation, and then calling nextPermutation until it returns false.
  • This is guaranteed to generate all distinct permutations of the range
  • exactly once. If there are N elements in the range and all of them are
  • unique, then N! permutations will be generated. Otherwise, if there are
  • some duplicated elements, fewer permutations will be produced. ---- // Enumerate all permutations int[] a = 1,2,3,4,5; do { // use the current permutation and // proceed to the next permutation of the array. } while (nextPermutation(a)); ---- *

    Parameters