Leecode89
题目
格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。
给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。格雷编码序列必须以 0 开头。
分析
首先本题是先给我们介绍了一下什么是格雷编码,然后要求给定编码的总位数,通过代码计算返回出格雷编码序列。唯一的确定的要求只有开头为0。所以可以通过万能的百度,了解一下什么是格雷编码。
解法
通过百度大大我更加深刻的了解了什么是格雷码并了解了其构造方法。
上图来自百度
通过此种递归方法我们可以得出代码。
代码:
public class Solution
{
public IList<int> GrayCode(int n)
{
IList<int> num = new List<int>();
int len=0;
num.Add(0);
for (int i = 0; i < n; i++)
{
len = num.Count;
for (int j = len - 1; j >= 0; j--)
{
num.Add((int)(num[j] + Math.Pow(2, i)));
}
}
return num;
}
}
本次代码就是通过将前一个集合逆序后加一个前缀1然后一次次进行这种运算得到最终的格雷编码序列。
效果:
人生第一次双100