【整理自用】清奇的思路(二) 剑指offer: 数字二进制中1的个数

4人阅读 评论(0) 收藏 举报
分类:

================================题目在下面=====================================

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

清奇的思路:
思路提供者为牛客网该题下菩提旭光的回答
1. 如果一个整数不为0,那么这个整数二进制中至少有一位是1。
2. 如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响。
3. 举个例子:一个二进制数1100,从右边数起第三位是处于最右边的一个1。减去1后,第三位变成0,它后面的两位0变成了1,而前面的1保持不变,因此得到的结果是1011。我们发现减1的结果是把最右边的一个1开始的所有位都取反了。
4. 此时,如果我们再把原来的整数和减去1之后的结果做与运算,从原来整数最右边一个1那一位开始所有位都会变成0。如1100&1011=1000。
5. 综上,如果把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0。那么一个整数的二进制有多少个1,就可以进行多少次这样的操作。

代码如下:

class Solution {
public:
     int  NumberOf1(int n) {
         int count=0;
         while(n != 0)
         {
              ++count;
              n = n & (n-1);
         }
         return count;
     }
};
查看评论

【剑指offer】二进制中1的个数

剑指offer上的第10题,在九度OJ上测试通过。 时间限制:1 秒内存限制:128 兆 题目描述: 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 输入: 输入可能包含...
  • mmc_maodun
  • mmc_maodun
  • 2014-05-10 08:32:34
  • 3185

剑指Offer面试题10(Java版):二进制中的1的个数

题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制是1001,有2位是1,因此如果输入9,该函数输出2. 1、可能引起死循环的解法 这是一道很基本的考察二进制和...
  • jsqfengbao
  • jsqfengbao
  • 2015-07-30 08:17:39
  • 2131

【剑指Offer面试题】 九度OJ1513:二进制中1的个数

题目链接地址: http://ac.jobdu.com/problem.php?pid=1513题目1513:二进制中1的个数时间限制:1 秒内存限制:128 兆特殊判题:否提交:4217解决:1...
  • zhoubin1992
  • zhoubin1992
  • 2015-07-28 16:20:30
  • 862

剑指Offer面试题10二进制中1的个数(位运算)附带一个进制转换题

面试题10:二进制中1的个数 实现一个函数,输入一个整数,输出该数二进制表示中1的个数。例如9的二进制是1001,则输出2。 位运算相关知识:位运算共5种,与(&)是同时为1才为1,或(|)是有一...
  • login_sonata
  • login_sonata
  • 2017-03-04 20:42:15
  • 554

剑指offer--二进制中的1的个数--补码

题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 首先复习一下补码。。这道题考的位运算 --> 位运算 计算机中的符号数有三种表示方法,即原码、反码和补...
  • obession
  • obession
  • 2017-06-21 20:01:50
  • 176

[牛客网,剑指offer,python] 二进制中1的个数

二进制中1的个数题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。解题思路将该二进制数的每一位与1做与运算,统计结果为1的个数。 具体做法是:对二进制数进行右移操作,每次右移一...
  • ysk0825
  • ysk0825
  • 2017-07-03 15:42:37
  • 130

二进制中1的个数[剑指offer]之python实现

题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。题目链接# -*- coding:utf-8 -*- class Solution: def NumberOf1(sel...
  • huaxixidongbeishida
  • huaxixidongbeishida
  • 2016-10-16 21:02:08
  • 1461

剑指offer:二进制中1的个数(java)

题目描述: 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。比如输入9,9的二进制表示是1001,1的个数是2,所以输出2。 这有一个重要结论:一个数与该数减一的结果进行与运算,会...
  • abc7845129630
  • abc7845129630
  • 2016-09-29 12:45:49
  • 255

剑指offer----二进制中1的个数----java实现

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 思路一:移位运算  右移:右移n位,最右边的n位会被舍弃,如果是无符号的话,用0填补最左边的n位,如果是有符号的,用1填补坐左边的...
  • snow_7
  • snow_7
  • 2016-07-06 10:22:04
  • 229

剑指offer-10-Python实现(二进制中1的个数)

题目内容:解答思路: 把一个整数减去1,再和原来的整数做位与运算,会把该整数最右边一个1变成0.也就是说,一个整数的二进制有多少个1,就可以完成多少次这样的操作。可以写出代码:def func(n)...
  • jackmcgradylee
  • jackmcgradylee
  • 2017-09-06 21:46:01
  • 104
    个人资料
    持之以恒
    等级:
    访问量: 477
    积分: 233
    排名: 33万+
    文章存档