您的位置:首页 > 其它

LeetCode题目 Gray Code 的解法与疑问

2014-06-28 13:29 483 查看
LeetCode Gray Code  这一题,不是难题不过有个地方没搞清楚。
https://oj.leetcode.com/problems/gray-code/
The gray code is a binary numeral system where two successive values differ in only one bit.

Given a non-negative integer n representing the total number of bits in the code, print the sequence of gray code. A gray code sequence must begin with 0.

For example, given n = 2, return 
[0,1,3,2]
. Its
gray code sequence is:
我写的答案是这样的:

vector<int> grayCode(int n)
{
vector<int> Bits(1,0);
for(int GrayDigit = 0;GrayDigit<n;GrayDigit++)
{
int count = Bits.size();
while(count!=0)
Bits.push_back(Bits[--count]|(1<<GrayDigit));
/*
vector<int>::iterator iter = Bits.end();
while(Bits.begin()!=iter) //push之后再做while循环会报错
Bits.push_back(*(--iter)|(1<<GrayDigit));*/
}
return Bits;
}

在计算每一位的方法中,过程用int标记(int count = Bits.size();)没有任何问题。

不明白为什么用迭代器却不行:vector<int>::iterator iter = Bits.end();

第一次进入while循环是正确的,可以成功push_back, 之后Bits中有 0,1两个元素。然是回到while循环判断那里就会报错,难道push之后iter不能再和Bits这个容器对比??
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息