这是338题里的代码,数比特,我想我已经写完了。但是当输入为5时,这些代码会出现运行时错误吗?但是为什么呢?
问题是:给定一个非负整数数num。对于范围为0的每一个数字,≤i,≤,num,计算其二进制表示中的1的个数,并将它们作为数组返回。
class Solution {
public:
vector<int> countBits(int num) {
vector<int> binaryone(num+1);
binaryone[0]=0;
if(0==num)
return binaryone;
binaryone[1]=1;
if(1==num)
return binaryone;
int w = 1 ;
int i = 2;
while(i<=num+1)
{
if(i<(pow(2,w-1)+pow(2,w-2)))
{
binaryone[i]=binaryone[i-pow(2,w-2)];
}
else
{
if(i<=(pow(2,w)-1))
{
binaryone[i]=binaryone[i-pow(2,w-2)]+1;
}
else
{
if(i==pow(2,w))
{
w++;
binaryone[i]=binaryone[i-pow(2,w-2)];
}
}
}
i++;
}
return binaryone;
}
};发布于 2016-04-28 13:23:23
我不认为这只会有5,但对你的所有投入。这是因为您通过以下方法在num+1向量中创建了binaryone元素:
vector<int> binaryone(num+1);
您的循环while(i<=num+1)正在索引一个在零基础索引结束后的元素,给您一个运行时错误。如果您有n元素,则索引范围将来自0 to n-1。
因此,将循环条件更改为:while(i<num+1)
https://stackoverflow.com/questions/36915687
复制相似问题