您的位置:首页 > 其它

leetcode 89: Gray Code

2015-08-09 12:37 369 查看
class Solution {
public:
vector<int> grayCode(int n) {
vector<int> res;
map<int,bool> mp;//check whether a number is existed
res.push_back(0);
if(n==0)
return res;
mp[0]=1;
vector<int> cal(n);//save as 1,2,4,8,...
cal[0]=1;
for(int i=1;i<n;i++)
cal[i]=cal[i-1]*2;
int num=0;
int i=0;
while(i<n)
{
int temp=num^cal[i];
if(mp.find(temp)==mp.end())
{
mp[temp]=1;
res.push_back(temp);
num=temp;
i=0;
}
else
i++;
}
return res;
}
};


A simpler way to do it

class Solution {
public:
vector<int> grayCode(int n) {
vector<int> res;
res.push_back(0);
if(n==0)
return res;
int mask=1;
while(res.size()!=1<<n)
{
int len=res.size();
for(int i=len-1;i>=0;i--)
res.push_back(mask|res[i]);
mask=mask<<1;
}
return res;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: