[LeetCode] 89. Gray Code 格雷码
2023-09-27 14:28:37 时间
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 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; } };
All LeetCode Questions List 题目汇总
相关文章
- 【LeetCode】二叉搜索树中第K小的元素 [M](二叉树遍历)
- [leetcode]Pow(x, n)
- LeetCode 107 Binary Tree Level Order Traversal II(二叉树的层级顺序遍历2)(*)
- [leetcode]Gray Code
- LeetCode_随机化_中等_380. O(1) 时间插入、删除和获取随机元素
- LeetCode_双指针_简单_283.移动零
- LeetCode·每日一题·1053. 交换一次的先前排列·贪心
- LeetCode·每日一题·864.获取所有钥匙的最短路径·广度优先搜索
- LeetCode·101.对称二叉树·递归
- [LeetCode] 144. Binary Tree Preorder Traversal 二叉树的先序遍历
- leetcode 141 环形链表