剑指offer(8)

摘要:
题目:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思路:第一反应想到的是把数右移,每一位与1相与,然后判断个数,但是若输入的为负数,会出现死循环现象。=0){count++;}flag=flag˂˂1;}returncount;}}但是这个解法中,如果系统是32位,需要判断32次,接下来的算法中,整数中有几个1就只需循环几次。

题目:

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

思路:

第一反应想到的是把数右移,每一位与1相与,然后判断个数,但是若输入的为负数,会出现死循环现象。

所以我们设置一个标志量1,首先把输入数与1相与,判断,接着,左移标志量,继续接着判断,直到标志位超出系统位数,全变成0为止,这样就可以避免输入负数,出现死循环的现象。

public class Solution {
    public int NumberOf1(int n) {
        int flag = 1;
        int count = 0;
        while(flag!=0){
            if((n&flag)!=0){
                count++;
            }
            flag=flag<<1;
        }
        return count;
    }
}

但是这个解法中,如果系统是32位,需要判断32次,接下来的算法中,整数中有几个1就只需循环几次。

输入数如果不是0,那么至少有一位是0,当我们把这个数减一,若最右边的1在m位,且最后一位是0,那么m-1位至最后位全变成1,m位变为0,例如101000,前文m位即为倒数第四位,当减一时,m位变成0,而m位之后全变成1,此时让这个输入数-1与之前的输入数做与运算,会发现我们是在做“去1”运算,当输入数中有k个1,那么我们完成k次的"去1"运算后,输入数将会变成0。

public class Solution {
    public int NumberOf1(int n) {

         int count = 0;
        while(n!= 0){
            count++;
            n = n & (n - 1);
         }
        return count;
    }
}

免责声明:文章转载自《剑指offer(8)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇升级到k8s的17.0出现问题oracle事务下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

Vue中进行断点调试的两种方式(使用外部浏览器和VsCode Debug for Chrome 插件)

但是在Vue中如果想要进行调试时,如果是在js中调试的话,可以直接添加一个debugger,然后在浏览器中打开检查进行断点调试。比如:在Vue页面中,点击搜索按钮时搜索会触发handleQuery方法resetQuery(){this.resetForm;this.handleQuery();},其中调用了请求查询数据的方法handleQuery(){thi...

"SQLserver 事务日志已满"解决方法

如果不够,备份后换个地方存[注:tempdb你数据库名称。...

uniapp之页面间传递和接收数组

uni-app如何在页面之前发送和传递数组?如果阵列是直接发送和传递的,则收到的消息如下所示。无法获取更多的对象值。接收数组对象的参数。您可以首先将数组转换为JSON字符串,然后在将其传递到页面后将其解析为JavaScript对象。...

2022年可用QQ机器人框架

4.小李子机器人官网:https://xiaolz.cn评估:支持多个Q登录和论坛似乎是目前最活跃的。它支持许多api,可以满足许多需求。没有限制,但有很多错误。...

PostgreSQL 语法

Psql(11.12)输入“help”以获取帮助信息。postgres=#help输入命令行工具,…])][*|表达式[[AS]输出_名称][,...

Qemu模拟器运行AIX 7.2 系统

AIX系统是IBM开发的一套UNIX操作系统。它可以在所有IBM p系列和IBM RS/6000工作站、服务器和大型并行超级计算机上运行。CPU通过动态二进制转换进行仿真,并提供了一系列硬件模型。AIX系统仅支持IBM的powercpu,通用虚拟机软件仅采用X86架构,无法安装。由于QEMU的全仿真特性,可以对powercpu进行仿真以实现系统安装。...