Problem
Given a string, write a function that uses recursion to output a list of all the possible permutations of that string.
For example, given s=’abc’ the function should return [‘abc’, ‘acb’, ‘bac’, ‘bca’, ‘cab’, ‘cba’]
Note: If a character is repeated, treat each occurence as distinct, for example an input of ‘xxx’ would return a list with 6 “versions” of ‘xxx’
Solution
Let’s think about what the steps we need to take here are:
def permute(s):
output = []
if len(s) <= 1:
output=[s]
else:
for i, let in enumerate(s):
for perm in permute(s[:i]+s[i+1:]):
output+=[let+perm]
return output
permute('abc')
Test Your Solution
"""
RUN THIS CELL TO TEST YOUR SOLUTION.
"""
from nose.tools import assert_equal
class TestPerm(object):
def test(self,solution):
assert_equal(sorted(solution('abc')),sorted(['abc', 'acb', 'bac', 'bca', 'cab', 'cba']))
assert_equal(sorted(solution('dog')),sorted(['dog', 'dgo', 'odg', 'ogd', 'gdo', 'god']))
print ('All test cases passed.')
# Run Tests
t = TestPerm()
t.test(permute)
All test cases passed.
Recommended: Introduction to Recursion
Follow Me
If you like my post please follow me to read my latest post on programming and technology.
Leave a Comment
You must be logged in to post a comment.