[LeetCode] 89. Gray Code 格雷码
发布时间:2020-12-14 03:45:22 所属栏目:大数据 来源:网络整理
导读: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 begi
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:? 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 [0,1,2] Example 2: Input:?0 Output:?[0] Explanation: We define the gray code sequence to begin with 0. ? A gray 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]. 首先要清楚什么是格雷码,然后用位操作来处理。 Java: public List<Integer> grayCode(int n) { List<Integer> result = new LinkedList<>(); for (int i = 0; i < 1<<n; i++) result.add(i ^ i>>1); return result; } Java: public List<Integer> grayCode(int n) { List<Integer> rs=new ArrayList<Integer>(); rs.add(0); for(int i=0;i<n;i++){ int size=rs.size(); for(int k=size-1;k>=0;k--) rs.add(rs.get(k) | 1<<i); } return rs; } Python: class Solution(object): def grayCode(self,n): """ :type n: int :rtype: List[int] """ result = [0] for i in xrange(n): for n in reversed(result): result.append(1 << i | n) return result Python: # Proof of closed form formula could be found here: # http://math.stackexchange.com/questions/425894/proof-of-closed-form-formula-to-convert-a-binary-number-to-its-gray-code class Solution2(object): def grayCode(self,n): """ :type n: int :rtype: List[int] """ return [i >> 1 ^ i for i in xrange(1 << n)] C++: // Time: (2^n) // Space: O(1) class Solution { public: vector<int> grayCode(int n) { vector<int> result = {0}; for (int i = 0; i < n; ++i) { for (int j = result.size() - 1; j >= 0; --j) { result.emplace_back(1 << i | result[j]); } } return result; } }; C++: // Time: (2^n) // Space: O(1) // Proof of closed form formula could be found here: // http://math.stackexchange.com/questions/425894/proof-of-closed-form-formula-to-convert-a-binary-number-to-its-gray-code class Solution2 { public: vector<int> grayCode(int n) { vector<int> result; for (int i = 0; i < 1 << n; ++i) { result.emplace_back(i >> 1 ^ i); } return result; } }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |