interview training: permutations
This commit is contained in:
48
puzzles/interviews/training/permutation.py
Normal file
48
puzzles/interviews/training/permutation.py
Normal file
@@ -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)
|
||||||
Reference in New Issue
Block a user