Это 338-й вопрос Leetcode, Counting Bits. Думаю, я его закончил. Но этот код получает ошибку времени выполнения, когда ввод равен 5? но почему?
вопрос: дано неотрицательное целое число num. Для каждого числа i в диапазоне 0 ≤ i ≤ num вычислить количество единиц в их двоичном представлении и вернуть их в виде массива.
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;
}
};
pow
— это функция для чисел с плавающей запятой. Вы работаете с целыми числами, и степени двойки2^^n
можно записать как1 << n
. Вы также захотите использовать беззнаковые целые числа. - person M Oehm   schedule 28.04.2016at()
вместо использования[ ]
для доступа к элементам вектора, скорее всего, даст вам гораздо лучшее сообщение об ошибке, поскольку будет выдано исключениеout_of_range
. - person PaulMcKenzie   schedule 28.04.2016