1. 程式人生 > >Leetcode 89. Gray Code

Leetcode 89. Gray Code

The gray code is a binary numeral system where two successive values differ in only one bit.

Given a non-negative integer n representing the total number of bits in the code, print the sequence of gray code. A gray code sequence must begin with 0.

Example 1:

Input: 2
Output: [0,1,3,2]
Explanation:
00 - 0
01 - 1
11 - 3
10 - 2

For a given n
, a gray code sequence may not be uniquely defined. For example, [0,2,3,1] is also a valid gray code sequence. 00 - 0 10 - 2 11 - 3 01 - 1

Example 2:

Input: 0
Output: [0]
Explanation: We define the gray code sequence to begin with 0.
             A gray code sequence of n has size = 2n, which for n = 0 the size is 20 = 1.
             Therefore, for n
= 0 the gray code sequence is [0].

Answer:

dfs

class Solution(object):
    def dfs(self,node,previous,depth,target):
        if depth==target:
            self.result=list(previous)
            return True
        child=[]
        for m in self.masks:
            child.append(node^m)
            
        if len(child)==0:
            return False
        
        for c in child:
            if c not in previous:
                previous.append(c)
                result=self.dfs(c,previous,depth+1,target)
                previous.pop()
                if result==True:
                    return True
    def grayCode(self, n):
        """
        :type n: int
        :rtype: List[int]
        """
        self.masks=[]
        self.result=[]
        for i in range(n):
            self.masks.append(1<<i)
        self.dfs(0,[0],1,2**n)
        return self.result