首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >剑指offer:二进制中1的个数

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

作者头像
帅地
发布2019-03-11 15:45:13
发布2019-03-11 15:45:13
4350
举报
文章被收录于专栏:苦逼的码农苦逼的码农

前言

本来是打算次条每天更新面试题和算法刷题的,加上头条一共要三篇文章,实在更不来,而且两篇都看的人也不多,所以我就算法刷题和面试题论着更新,更新的时候多更新几道。

题目描述

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

解答

方法1

让 n 和 000….001,相与判断第一位是不是 1 ,然后和 00….010相与判断第二位是不是 1,以此类推。代码如下:

代码语言:javascript
复制
 1    public int NumberOf1(int n) {
 2        int count = 0;
 3        int k = 1;
 4        while (k != 0) {
 5            if ((n & k) != 0) {
 6                count++;
 7            }
 8            k = k << 1;
 9        }
10        return count;
11    }

方法2

这个方法就比较牛逼了,可以说是最优解,直接看代码,如果不懂的可以自己找几个数字演示下,就能够理解了。

代码语言:javascript
复制
1    public int NumberOf12(int n) {
2        int count = 0;
3        int k = 1;
4        while (n != 0) {
5            count++;
6            n = (n - 1) & n;
7        }
8        return count;
9    }

其实有很多题是可以利用位的异或来解决的,大家可以思考下平时遇到哪些题是用这种方法解决的,我后面会给出几道题,这些题都可以用异或位运算巧妙解决。发的另一道题也用到了位运算。

其实我是想跟大家说,做题的时候,有时候想想是否可以用位运算来解决。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-02-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 帅地玩编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 题目描述
  • 解答
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档