[LeetCode]476. Number Complement
来源:互联网 发布:淘宝助手打印快递单 编辑:程序博客网 时间:2024/05/29 12:05
Given a positive integer, output its complement number. The complement strategy is to flip the bits of its binary representation.
Note:
- The given integer is guaranteed to fit within the range of a 32-bit signed integer.
- You could assume no leading zero bit in the integer’s binary representation.
Example 1:
Input: 5Output: 2Explanation: The binary representation of 5 is 101 (no leading zero bits), and its complement is 010. So you need to output 2.
Example 2:
Input: 1Output: 0Explanation: The binary representation of 1 is 1 (no leading zero bits), and its complement is 0. So you need to output 0.
这道题,如果熟悉计算机的原码, 反码, 补码等知识,其实非常简单,但是,我不熟悉……所以一开始用了非常死蠢的方法在做,最后在算大数字的时候也不对,估计是溢出了。
所以要先熟悉一下相关的知识基础:
原码, 反码, 补码 详解
【思路】
如果我们能知道该数最高位的1所在的位置,就可以构造一个长度和该数据所占位置一样长的一个掩码mask,然后该数和mask进行异或即可。
例如:5的二进制是101,我们的构造的掩码为mask=111,两者异或则为010,即是所要的结果。
public class Solution { public int findComplement(int num) { int mask,temp; mask=1; temp=num; while(temp!=0) { mask=mask<<1; temp=temp>>1; } return num^(mask-1); }}
用字节的最高位表示符号的正负,0代表正,1代表负;但是这个符号位也会参与运算。
(1) << 运算规则:按二进制形式吧所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。
语法格式:
需要移位的数字<<移位的次数
例如:4<<2 ,则是将数字4左移2位
计算过程
4<<2
Java中一个int数占四个字节,那么4的二进制数字为00000000 00000000 00000000 00000100,然后把该数字左移两位。其它的数字都朝右平移两位,最后在低位(右侧)的两个空位补零。则得到的最终结果是00000000 00000000 00000000 00010000,即转换为十进制数16。
在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。
在溢出时,则不符合这个规律。
(2)>>运算规则:按二进制形式吧所有的数字都向右移动对应的位置,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1。
语法格式:
需要移位的数字>>移位的次数
例如:-4>>2和4>>2,则是将数字 -4和4右移2位
计算过程
4>>2
Java中一个int数占四个字节,同样4的二进制为00000000 00000000 00000000 00000100,然后把该数字右移两位。其它的数字都朝左平移两位,最后在高位补符号位(该数是正数,全补零),得到的结果是00000000 00000000 00000000 00000001,即使十进制的1。数学意义就是右移移位相当于除2,右移n位相当于除以2的n次方。
- LeetCode 476. Number Complement
- leetcode 476. Number Complement
- 【Leetcode】476. Number Complement
- 【Leetcode】476. Number Complement
- LeetCode 476. Number Complement
- LeetCode 476. Number Complement
- LeetCode--476. Number Complement
- LeetCode 476. Number Complement
- 476. Number Complement [LeetCode]
- [LeetCode]476.Number Complement
- 【LeetCode】 476. Number Complement
- LeetCode 476. Number Complement
- LeetCode 476. Number Complement
- 【LeetCode】476. Number Complement
- leetcode 476. Number Complement
- [LeetCode]476. Number Complement
- LeetCode 476. Number Complement
- 【LeetCode】476. Number Complement
- node.js回调
- 3DText/TextMesh文字模糊解决方法
- 判断两条直线是否相交
- Code force 195A—Let's Watch Football
- 冒泡排序
- [LeetCode]476. Number Complement
- Entity Framework无法将更改同步到数据库的问题
- python爬虫一:必应图片(从网页源代码中找出图片链接然后下载)
- Python入门
- 一个简化版的SSH后端框架demo,支持接口、页面开发
- 【Away3D代码解读】(一):主要类及说明
- 人工智能要闻: 沃尔玛用机器人取代数千岗位, 腾讯开AI加速器, 猎户星空获微软人脸识别有限制类第一名
- tcp协议_mss
- Git 一些错误的解决方法 Pull is not possible because you have unmerged files.