格雷码

格雷码(Gray Code)是一个数列集合,每个数使用二进位来表示,假设使用n位元来表示每个数字,任两个数之间只有一个位元值不同。

例如以下的格雷码:

格雷码_第1张图片

具体实现代码如下:

ector<string>::iterator it;
vector<string>ans;
map<string, int>m;
vector<string> getGray(int n)
{
    // write code here
    string str = "";
    for(int i=0; i<n; i++)
        str += "0";
    ans.push_back(str);
    m[str] = 1;
    while(1)
    {
        int flag = 0;
        for(int i=n-1; i>=0; i--)
        {
            string tmp = str;
            if(tmp[i] == '0')
                tmp[i] = '1';
            else
                tmp[i] = '0';
            if(!m[tmp])
            {
                flag = 1;
                str = tmp;
                ans.push_back(tmp);
                m[tmp] = 1;
                break;
            }
        }
        if(!flag)
            break;
    }
    return ans;
}



你可能感兴趣的:(NetWork)