博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二进制 中 1 的 个数
阅读量:4647 次
发布时间:2019-06-09

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

题目来源:

 https://www.nowcoder.com/practice/8ee967e43c2c4ec193b040ea7fbb10b8?tpId=13&tqId=11164&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

 
分析:

 计算二进制中1的个数,以前在LeetCode上面好像遇到过这个题目,记得当是也是对答案拍案叫绝,这次尽然没有想起来

自己的代码:
class Solution:    def NumberOf1(self, n):        # write code here        count=0        if n<0:            n=n&0xffffffff        while n!=0:            count+=1            n= n&(n-1)        return count

 

代码效率/结果:
 
优秀代码:
代码效率/结果:
 
自己优化后的代码:
 
反思改进策略:

 1.怎么统计1的个数?

利用小技巧x&(x-1)可以将整数最右边的1变成0,通过这个小技巧,我们只要循环判断n=n&(n-1)是否为0,即可统计1的个数。

 

2.关于计算机中补码的操作

 

9的源码为0000  1001

如果是负数的话,补码为最高位置1 ,

其余取反也就是1111  0110,然后在最低位加1即可即1111  0111

 

在python里面也是这样存储的,这里有一个问题:如果负数的话,不处理,那么n-1这个操作,会使得10000,下一次全部变成11111,因为符号位是不会右移变成0的,会不断补充1进去

这里使用一个方法,n & 0xffffffff,这样可以使带符号数变成无符号数,这样就可以顺利的通过-1操作来计数里面1的个数

简单一句话:就是把补码变成无符号数

具体解释:http://www.cnblogs.com/lazycoding/archive/2011/03/21/unsigned-signed.html

 

 

 

写题时间时长:

1hou

转载于:https://www.cnblogs.com/captain-dl/p/10671132.html

你可能感兴趣的文章
Docker镜像分层技术
查看>>
elastic-job详解(三):Job的手动触发功能
查看>>
SQLite中使用全文搜索FTS
查看>>
Shell 文件测试运算符
查看>>
Shell 示例:将指定的文件内容转换为大写
查看>>
白盒测试实践项目(day5)
查看>>
rem、em、px、pt及网站字体大小设配
查看>>
Alpha版本冲刺(五)
查看>>
JQuery.Boxy (一) 弹出层
查看>>
问题 1025: [编程入门]数组插入处理
查看>>
Leetcode 416. Partition Equal Subset Sum
查看>>
表单标签
查看>>
163相册验证码图片的识别手记之二 --- 识别[转]
查看>>
hive中grouping sets的使用
查看>>
Factorials
查看>>
回车登陆代码(兼容IE和FF)
查看>>
搞懂Python的类和对象名称空间
查看>>
整理chinaUnix上【你职业生涯中最难忘的误操作】
查看>>
iOS - 事件处理全过程(补充)
查看>>
js基本概述
查看>>