476 Number Complement
问题:给定一个整数,返回它的补数。补数的是将原数据的二进制表示反转。例如 5 的二进制位是 101,反转之后是:010,也就是整数2。所以输入5,返回2.。输入1,返回0。
思路:取反操作是~,例如~5,但是5的最高位前面的0也会取反,0000 0000 0000 0101 会变成 1111 1111 1111 1010 ,而实际上,只有从右数的第三位是有效的,其他的1是无效的。按照461题目的思路,用一个字符串bit存储二进制位。
将 5和1与,得到1,bit=’0’;
5>>1,得到2,2&1,得到0 ,bit=’10’
2>>1,得到1,1&1,得到1,bit=’010’
1>>1 ,得到0,退出。
然后使用Integer.ValueOf 将一个二进制字符串,转为int。
public int findComplement(int num) {String bit = "";while (num != 0) {bit = ((num & 1) == 1 ? 0 : 1) + bit;num >>= 1;}return Integer.valueOf(bit, 2);}
收获:
1 Integer.highestOneBit(num) 返回的是 num二进制中最高位的1,所表示的int数字。例如5的二进制 0000 0000 0000 0101 ,最高位的1表示4。
2 我的思路是一位一位取反,数字为0就退出了。另外一种思路是对 ~num 后无效的1 取一个&操作,将其去掉。如果有这样一个数:没有意义的位上是0,有意义的位上全是1,然后与~num 做&操作,那么就可以得到正确结果。对5来讲,需要一个这样的数:0000 0000 0000 0111。这个数等于(Integer.highestOneBit(5)<<1)-1,也就是(4<<2)-1=7。最终:~num & ((Integer.highestOneBit(num)<<1) - 1).
再进一步:第三位的1(从右开始数),肯定会变成0,所以 0000 0000 0000 0011这样一个数也是可以的。最终:~num & (Integer.highestOneBit(num) - 1)。
3 掩码: 0000 0000 0000 0011 这样的数字叫做掩码。掩码是一串二进制代码,对目标字段进行位与的操作与运算,屏蔽当前的输入位。 将源码与掩码经过按位运算或逻辑运算得出新的操作数。其中要用到按位运算如OR运算和AND运算。例如:大写字母转小写字母,IP地址的掩码。
参考:
1 leetcode题目
2 leetcode讨论
476 Number Complement相关推荐
- 263.Ugly Number||202 happy number||476 Number Complement||136 Single Number
263.Ugly Number 判断因数是否只有素数2.3.5.. 感觉比较简单: class Solution(object):def isUgly(self, num):""& ...
- LeetCode 476. Number Complement
题目: Given a positive integer, output its complement number. The complement strategy is to flip the b ...
- Leetcode 476. Number Complement 补数 解题报告
1 解题思想 这道题给了一个正的整数,然后需要计算一个特殊的补数,这个补数的计算方式是: 1.对于这个整数num,转换成对应的二进制表示,这个二进制表示共有x位(不高于32) 2.将这x位取反后,得到 ...
- 【leetcode】【套路题】476. Number Complement
一.题目描述 Given a positive integer, output its complement number. The complement strategy is to flip th ...
- leetcode 476. Number Complement | 476. 数字的补数(位运算)
题目 https://leetcode.com/problems/number-complement/ 题解 class Solution {public int findComplement(int ...
- 【LeetCode】476. 数字的补数 Number Complement
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 公众号:负雪明烛 本文关键词:Leetcode, 力扣,476, 补数,二进制,Pyth ...
- leetcode 476. 数字的补数(Number Complement)
目录 题目描述: 示例 1: 示例 2: 解法: 题目描述: 给定一个正整数,输出它的补数.补数是对该数的二进制表示取反. 注意: 给定的整数保证在32位带符号整数的范围内. 你可以假定二进制数不包含 ...
- 数的补数 Number Complement
2019独角兽企业重金招聘Python工程师标准>>> 问题: Given a positive integer, output its complement number. The ...
- LeetCode Number Complement
原题链接在这里:https://leetcode.com/problems/number-complement/ 题目: Given a positive integer, output its co ...
最新文章
- 工作笔记---巡检记录
- 二进制搜索算法_使用安全摄像机镜头解释二进制搜索算法
- 从MegaEase看云原生
- undistortPoints()函数用法总结
- 计算机网络应用押韵句,现代汉语练习题
- 信息学奥赛一本通 1358:中缀表达式值(expr)
- 深入解读Linux进程调度系列(1)——调度的初始化
- ae教程 (四)运动控制 (三)
- html屏幕缩小图片不失真,html图片失真怎么办
- 基于深度学习的新闻摘要生成算法实现与详解(Encoder-Decoder框架模型)
- 四、网络层(一)网络层的功能
- python读取HTML文本文件
- C语言及ARM中堆栈指针SP设置的理解与总结
- 解决Google AdSense导致网站加载慢的优化方法
- 100句正能量的句子经典语句
- Webapck 体系基础
- 本周总结 前端第二次作业 模仿制作百度界面
- 024--离职手续办理
- 复试21天 day two
- 视频教程-微信公众号开发-微信开发
热门文章
- [HNOI 2001]求正整数
- OpenCV人脸检测并把图片写成avi视频
- 做移动端视频通话软件,大致看了下现有的开源软件(转)
- 发消息给非windows窗体程序
- Quartz实现定时功能 job.xml文件的配置
- nginx php怎么配置伪静态,nginx rewrite 伪静态配置参数和使用例子
- apache 修改服务器配置,Apache服务器配置全攻略
- Android Log工具类,Toast工具类,获取当前方法名称
- docker centos node nginx
- 中考物理可不可以用计算机,不能用计算机?2021年起广州中考课目改为“4+4”...