给一个正整数,现在牛牛想得到一个不可重集合(该集合的元素不能重复),不重复地利用这个集合中的数进行加和可以表示出
的所有数。牛牛想知道这个集合大小的最小值为多少?
例如 的时候答案为
,所需要的集合为
。
其中 的表示方法如下:
注意:在表示一个数时,集合中的元素不能重复使用。例如这是不符合要求的表示方法。
class Solution: def getSize(self , n ): # write code here if (n==1&nbs***bsp;n==2): return 1 else: for i in range(n): num = 2**i - 1 if num>=n: return i break可以发现规律,当n小于等于
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 返回集合大小的最小值
* @param n long长整型
* @return int整型
*/
int getSize(long long n) {
// write code here
long long count = 1;
int size = 0;
do{
n -= count;
count <<= 1;
size++;
}while(n > 0);
return size;
}
}; 投机取巧这么就过了,但实际上我们可以通过二进制来思考这件事,只要能把n的每个位表示完就行了,需要的不重复数字个数就是n表示为二进制的长度。 class Solution: def getSize(self , n ): return len(bin(n)) - 2