DP(6)

来源:互联网 发布:微信点赞用什么软件好 编辑:程序博客网 时间:2024/06/04 19:14

Gray Code
格雷码不唯一。以下代码没有通过LeetCode的测试,但是输出是符合格雷码规则的编码序列。

bool diff(int a, int b, int n){    int s = a^b;    for (int i = 0; i < n; i++)    {        if ((1 << i) == s)            return true;    }    return false;}vector<int> grayCode(int n) {    int m = pow(2, n);    vector<int> flag(m);    vector<int> gray(m);    gray[0] = 0;    for (int i = 1; i < m; i++)        flag[i] = true;    for (int i = 1; i < m; i++)    {        for (int j = 1; j < m; j++)        {            //检测 与当前值是否只有一位不同            if (flag[j] && diff(gray[i - 1], j, n))            {                gray[i] = j;                flag[j] = false;                break;            }        }    }    return gray;        }

下面这段输出可以通过测试,也更简洁一些。

vector<int> grayCode(int n) {    vector<int> ans;    ans.push_back(0);    for (int i = 0; i < n; i++)        for (int j = ans.size() - 1; j >= 0; j--)            ans.push_back(ans[j] + (1 << i));    return ans; }
0 0
原创粉丝点击