**(leetcode_backtracking,递归) Gray Code
2015-03-02 14:13
417 查看
Gray Code
Total Accepted: 28247 TotalSubmissions: 86700My Submissions
Question
Solution
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.
For example, given n = 2, return
[0,1,3,2].
Its gray code sequence is:
00 - 0 01 - 1 11 - 3 10 - 2
Note:
For a given n, a gray code sequence is not uniquely defined.
For example,
[0,2,3,1]is also a valid gray
code sequence according to the above definition.
For now, the judge is able to judge based on one instance of gray code sequence. Sorry about that.
Show Tags
Have you met this question in a real interview?
Yes
No
Discuss
递归生成码表
这种方法基于格雷码是反射码的事实,利用递归的如下规则来构造:1位格雷码有两个码字
(n+1)位格雷码中的前2n个码字等于n位格雷码的码字,按顺序书写,加前缀0
(n+1)位格雷码中的后2n个码字等于n位格雷码的码字,按逆序书写,加前缀1[5]
2位格雷码 | 3位格雷码 | 4位格雷码 | 4位自然二进制码 |
---|---|---|---|
00 01 11 10 | 000 001 011 010 110 111 101 100 | 0000 0001 0011 0010 0110 0111 0101 0100 1100 1101 1111 1110 1010 1011 1001 1000 | 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 |
class Solution { public: vector<int> grayCode(int n) { if(n==0){ vector<int> result; result.push_back(0); return result; } vector<int> tmp = grayCode(n-1); int addNumber = 1<<(n-1); vector<int> result; result = tmp; for(int i = tmp.size()-1;i>=0;i--){ //n-1的格雷码 倒序 然后前面加上1... result.push_back(addNumber + tmp[i]); } return result; } };
相关文章推荐
- leetcode 89. Gray Code 按照index递归DFS解决 + Grey码生成公式 + 位运算直接计算
- 【Leetcode】89. Gray Code 【递归】
- LeetCode-89-Gray Code(模拟/递归)-Medium
- leetcode——backtracking[1] Generate Parentheses ,Catalan数——卡特兰数
- LeetCode - Gray Code
- leetcode || 89、Gray Code
- 51.leetcode N-Queens(hard)[递归回溯剪枝]
- leetcode 316. Remove Duplicate Letters 去除重复字符字典序最小字符串+贪心+递归
- LeetCode 22:Generate Parentheses的递归,回溯两种解法
- [LeetCode] World Search(!!!!回溯&&char *代替string&&递归)
- Leetcode 递归知识点总结
- leetcode 112. Path Sum ---java(树,递归)
- leetcode 22. Generate Parentheses-回溯|递归
- LeetCode刷题(47)--Gray Code
- LeetCode----Gray Code
- leetcode代码分类汇总之-递归
- [LeetCode]Gray Code
- LeetCode-10-Regular-Expression-Matching 递归模拟正则表达式
- leetcode之Binary Tree Preorder Traversal (前序),中序,后续。非递归,递归
- [leetcode]Path Sum--巧用递归