剑指offer-二进制中1的个数11】的更多相关文章

leetcode是求当前所有数的二进制中1的个数,剑指offer上是求某一个数二进制中1的个数 https://www.cnblogs.com/grandyang/p/5294255.html 第三种方法,利用奇偶性找规律 class Solution { public: vector<int> countBits(int num) { vector<}; ;i <= num;i++){ == ) result.push_back(result[i/]); else result.…
题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示.   思路: 如果一个整数不为0,那么这个整数至少有一位是1.如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话).其余所有位将不会受到影响. 举个例子:一个二进制数1100,从右边数起第三位是处于最右边的一个1.减去1后,第三位变成0,它后面的两位0变成了1,而前面的1保持不变,因此得到的结果是1011.我们发现减1的结果是把最右边的一个1开始的所…
题目描述: 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 分析: 加入一个数的二进制位是XXX...XXX1000...000,那么这个数减去1,就会变成XXX...XXX0111...111,将这两个数相与(即&), 那么就可以得到XXX...XXX0000...000,将原来的数的最后一个1变成0. 然后我们就可以继续用相同的方法探究更高位XXX...XXX中的1的个数了,每循环一次就将最后一个1变成0. 所以循环一共执行了该数中1的个数那么多次数.如果1的个数少的话,那…
题目描述实现一个函数,输入一个整数,输出该数二进制表示中1的个数.例如,把9表示成二进制是1001,则输出为2 常规解法首先把n和1做位运算,判断n的最低位是不是1,然后把1左移一位得到2,再把n和2做位运算,判断n的次低位是不是1…这样反复左移.循环的次数等于整数二进制的位数,32位的整数需要循环32次. class Solution { int NumberOfOne(int n){ int cnt = 0; unsigned int flag = 1; while(flag){ if(n…
/************************************************************************* > File Name: 08_NumOf1InBinary.c > Author: Juntaran > Mail: JuntaranMail@gmail.com > Created Time: 2016年08月29日 星期一 20时40分15秒 *******************************************…
容易想到的是将n一位一位的和1进行比较,产生如下代码 但是这样的话会出下面的问题 那么就是原数据不动,将1依次移动进行比较有如下的代码 一种更简单的方法是: 这样做的思路是 总而言之…
就是猜测试数据没有负数,哈哈 ----------------------------------------------------------------- 时间限制:1秒 空间限制:32768K 热度指数:351459 题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 用bitset,count()方法获取1的个数 class Solution { public: int NumberOf1(int n) { bitset<> bs(n); return bs.…
题目: 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 分析: 将数字和1先做与运算,然后将1右移一位,现在是判断数字的第二位是不是1,这样循环的做下去即可.也可以转换成字符串再统计1的个数. 程序: C++ class Solution { public: int NumberOf1(int n) { ; ; while(flag){ if(n & flag) res++; flag = flag << ; } return res; } }; Java publi…
题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 代码 class Solution { public: int NumberOf1(int n) { if(n==0) return 0; // 每次清除一位的0 int cnt=0; while(n) { n = n&(n-1); cnt++; } return cnt; } }; 减1的话一定会导致原数据有一位上的1变成0,直接取与操作会将该位置0.…
题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数.例如,把9表示成二进制是1001,有2位是1.因此,如果输入9则函数输出2. int Number(int n) { ; while (n) { count++; n = n & (n - ); } return count; }…