博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LintCode] Count 1 in Binary [典型位运算题目]
阅读量:5985 次
发布时间:2019-06-20

本文共 1021 字,大约阅读时间需要 3 分钟。

Problem

Count how many 1 in binary representation of a 32-bit integer.

Example

Given 32, return 1

Given 5, return 2

Given 1023, return 9

Challenge

If the integer is n bits with m bits. Can you do it in O(m) time?

Note

这道题,Olivia给我解决了两个疑问,还剩一个。首先是要用无符号右移运算符>>>,其次是可以用一个不断左移的二进制1作为参照。那么如何获得一个用1来进行补位的左移的1呢?

第一种解法,num右移,每次对末位进行比较,直到num为0;
第二种解法,1左移,每次和num的第i位比较,直到i = 32;
第三种解法,num和num-1逐位与,去1,直到num为0。

Solution

1.

public class Solution {    public int countOnes(int num) {        int count = 0;        while (num != 0) {            count += (num & 1);            num >>>= 1;        }        return count;    }};

2.

public class Solution {    public int countOnes(int num) {        int count = 0;        for(int i = 0 ; i < 32; i++) {            if((num & (1<

3.

public class Solution {    public int countOnes(int num) {        int count = 0;        while (num != 0) {            num &= num - 1;            count++;        }        return count;    }}

// 1111 1110 1110

// 1110 1101 1100
// 1100 1011 1000
// 1000 0111 0000

转载地址:http://hlylx.baihongyu.com/

你可能感兴趣的文章
Eclipse自动生成作者、日期注释等功能设置
查看>>
MySQL 按时间统计
查看>>
获取上下文
查看>>
SSL双向认证
查看>>
go语言的time包
查看>>
sheepdog安装和使用管理
查看>>
mycncart 之 支付宝手机网页即时到帐支付方式
查看>>
[Android]ContentProvider会用到的ProjectionMap的用处
查看>>
[Android]Linux BASH脚本中cmp比较命令的应用例子
查看>>
iptables规则备份与恢复, firewalld介绍
查看>>
内存对齐
查看>>
Exchange日常管理之二十:代表发送与代理发送
查看>>
while+case
查看>>
linux运维基础篇 unit8
查看>>
hibernate设置了hbm2ddl.auto不能自动建表和插入java.util.Date日期类型属性报错
查看>>
GANDCRAB V5.0.5勒索病毒软件删除 文件数据恢复
查看>>
Linux学习篇之shell编程基础
查看>>
Java操作文件内容
查看>>
责任链模式在Tomcat中的应用
查看>>
FlexAir获取MAC地址代码
查看>>