创建长度为x的数字序列,连续数字仅相差1位

时间:2014-05-20 14:21:12

标签: amazon bit-manipulation number-sequence

被问到亚马逊电话访谈第1轮

所以长度= 1

0 1(0 1)

长度= 2

00 01 11 10(0,1,3,2)

等等

写入长度为x的函数,返回以数字(基数为10)形式的数字

2 个答案:

答案 0 :(得分:3)

这被称为gray code,有几种不同的类型,其中一些比其他类型更容易构建。维基百科文章显示了一种从二进制代码转换为格式代码的简单方法:

unsigned int binaryToGray(unsigned int num)
{
    return (num >> 1) ^ num;
}

使用它,您只需迭代一定大小的所有数字,通过该功能,然后根据需要打印它们。

答案 1 :(得分:0)

这是一种方法:

int nval = (int)Math.Pow(2 , n);  
int divisor = nval/2; 
for (int i = 0; i < nval; i++)
{
    int nb =(int) (i % divisor);
    if ( nb== 2) Console.WriteLine(i + 1);
    else if (nb == 3) Console.WriteLine(i - 1);
    else Console.WriteLine(i);
}