1. 程式人生 > >One more time

One more time

演算法課碰到的問題,嘗試用一次py寫寫看了,不過時間複雜度還是挺高的O(n*2^n)。

Gray碼是一個長度為2^n的序列。序列中無相同元素,每個元素都是長度為n位的(0,1)串,相鄰元素恰好只有一位不同,用分治策略設計一個演算法對任意的n位構造相應的Gray碼。

class GrayCode:
    def getGray(self, n):
        return [bin((i>>1)^i).replace("0b","").rjust(n,"0") for i in range(2**n)]

//bin() 返回一個整數 int 或者長整數 long int 的二進位制表示。
//replace() 方法把字串中的 old(舊字串) 替換成 new(新字串)
//rjust() 返回一個原字串右對齊

t = GrayCode()
i = input()
print
(t.getGray(int(i)))

主要核心就一行return那裡,利用了二進位制兩兩xor得出格雷碼的特性。