解题思路
- 回溯算法
- 先找一次全排列,对每一个排列用公式转换成格雷编码,最高一位保留,后一位与前一位进行异或。
python 代码
class Solution:
def grayCode(self, n: int) -> List[int]:
if n == 0:
return [0]
ret = []
trace = []
self.backtrace(n,ret,trace)
res = []
for i in ret:
ss = 0
for k,v in enumerate(i[::-1]):
ss += v*(2**k)
res.append(ss)
return res
def backtrace(self,n,ret,trace):
if len(trace) == n:
a = trace[:]
b = trace[:]
for j in range(1,n):
b[j] = a[j-1]^b[j]
ret.append(b)
return
for i in range(2):
trace.append(i)
self.backtrace(n,ret,trace)
trace.pop()
s = Solution()
result = s.grayCode(2)
print(result)