why this got a runtime error only if input is 5?
这是leetcode的第338个问题,计算位。我想我已经完成了。但是当输入为5时,这些代码会得到一个运行时错误?但是为什么呢?
问题是:给定一个非负整数num。对于0≤i≤num范围内的每个数字i,计算其二进制表示形式中的1个数,并将其作为数组返回。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | 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; } }; |
我不认为这只会发生在5岁,而是你所有的投入。这是因为您在
循环
因此,将循环条件更改为: