diff --git a/puzzles/interviews/training/permutation.py b/puzzles/interviews/training/permutation.py new file mode 100644 index 0000000..dc6e11d --- /dev/null +++ b/puzzles/interviews/training/permutation.py @@ -0,0 +1,48 @@ +# +# Prints all permutations. +# +def permutation(s, b, e): + if b+1 == e: + print(s) + else: + for i in range(b, e-1): + permutation(s, b+1, e) + c = s[i+1] + s[i+1] = s[i] + s[i] = s[b] + s[b] = c + permutation(s, b+1, e) + c = s[b] + s[b] = s[e-1] + s[e-1] = c + +# +# Prints all permutations. But in addition doesn't print +# multiple instances of same value. +# e.g. abb bab bba ( doesn't print two abb ) +# +def permutation2(s): + print(s) + l = len(s) + + while True: + i = l-1 + while True: + ii = i + i = i - 1 + if ord(s[i]) < ord(s[ii]): + j = l-1 + while ord(s[i]) >= ord(s[j]): + j = j - 1 + s[i], s[j] = s[j], s[i] + s[ii:l] = s[ii:l][::-1] + print(s) + break + if i == 0: + return + +if __name__ == "__main__": + s = ['a', 'b', 'c', 'd', 'e', 'e'] + permutation(s, 0, len(s)) + print("--------------------------------------------") + permutation2(s)