Yet another Python 3~16 lines


  • 0
    available = [
    [], [(1, 2), (2, 3), (1, 4), (1, 5), (1, 6), (4, 7), (1, 8), (5, 9)],
        [(2, 1), (2, 3), (2, 4), (2, 5), (2, 6), (2, 7), (5, 8), (2, 9)],
        [(2, 1), (3, 2), (3, 4), (3, 5), (3, 6), (5, 7), (3, 8), (6, 9)],
        [(4, 1), (4, 2), (4, 3), (4, 5), (5, 6), (4, 7), (4, 8), (4, 9)],
        [(5, 1), (5, 2), (5, 3), (5, 4), (5, 6), (5, 7), (5, 8), (5, 9)],
        [(6, 1), (6, 2), (6, 3), (5, 4), (6, 5), (6, 7), (6, 8), (6, 9)],
        [(4, 1), (7, 2), (5, 3), (7, 4), (7, 5), (7, 6), (7, 8), (8, 9)],
        [(8, 1), (5, 2), (8, 3), (8, 4), (8, 5), (8, 6), (8, 7), (8, 9)],
        [(5, 1), (9, 2), (6, 3), (9, 4), (9, 5), (9, 6), (8, 7), (9, 8)]]
    
    class Solution(object):
        def numberOfPatterns(self, m, n, pre=[]):
            pre = [(p[0]|1<<a[1], a[1])
                        for p in pre
                        for a in available[p[1]]
                        if p[0]>>a[0] & ~p[0]>>a[1] & 1] or [(1<<i, i) for i in range(1, 10)] 
            return (n>1 and self.numberOfPatterns(m-1, n-1, pre)) + (m<2 and len(pre))
    

Log in to reply
 

Looks like your connection to LeetCode Discuss was lost, please wait while we try to reconnect.