Medium

Permutations IIIPython

Full explanation · Time O(n * n!) · Space O(n)

# Time:  O(n * n!)
# Space: O(n)

# backtracking, bitmasks
class Solution(object):
    def permute(self, n):
        """
        :type n: int
        :rtype: List[List[int]]
        """
        def backtracking(lookup):
            if len(curr) == n:
                result.append(curr[:])
                return
            for i in xrange(1, n+1):
                if lookup&(1<<(i-1)) or (curr and curr[-1]%2 == i%2):
                    continue
                curr.append(i)
                backtracking(lookup^(1<<(i-1)))
                curr.pop()
    
        result, curr = [], []
        backtracking(0)
        return result