这是Leetcode,Counting Bits的第338个问题。我想我完成了它。 但是当输入为5时,这些代码会出现运行时错误?但为什么呢?
问题是: 给定非负整数num。对于0≤i≤num范围内的每个数字i,计算其二进制表示中的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;
}
};
答案 0 :(得分:2)
我不认为这只会影响5,而是所有的输入。这是因为您在num+1
向量中创建了binaryone
元素:
vector<int> binaryone(num+1);
并且您的循环while(i<=num+1)
正在索引一个基于零的索引元素的结尾,这会给您一个运行时错误。如果您有n
个元素,则索引范围将来自0 to n-1
。
所以将你的循环条件改为:
while(i<num+1)