题目

https://leetcode-cn.com/problems/number-complement/


思路

我们想要返回已知数字的补数(num>=1)。

思路:

  1. 获取 num 的二进制数
  2. 将 num 的二进制数取反
  3. 由于取反后,所有高位的 0 都会变为1,所以需要截取有效的低位,得到真正的返回结果

* 参考:How to extract ‘k’ bits from a given position in a number

https://www.geeksforgeeks.org/extract-k-bits-given-position-number/

How to extract ‘k’ bits from a given position ‘p’ in a number?

Examples:

Input : number = 171k = 5 p = 2
Output : The extracted number is 21
171 is represented as 0101011 in binary,
so, you should get only 10101 i.e. 21. (从第2位开始,向左取5位)Input : number = 72k = 5 p = 1
Output : The extracted number is 8
72 is represented as 1001000 in binary,
so, you should get only 01000 i.e 8.
  1. Right shift number by p-1.
  2. Do bit wise AND of k set bits with the modified number. We can get k set bits by doing (1 << k) – 1.

Example:

// Java program to extract k bits from a given
// position.class GFG {// Function to extract k bits from p position// and returns the extracted value as integerstatic int bitExtracted(int number, int k, int p){return (((1 << k) - 1) & (number >> (p - 1)));}// Driver codepublic static void main (String[] args) {int number = 171, k = 5, p = 2;System.out.println("The extracted number is "+bitExtracted(number, k, p));}
}

Output:

The extracted number is 21

代码

1、易懂版
public class Solution {/*** 给你一个正整数 num ,输出它的补数。补数是对该数的二进制表示取反。*/public static int findComplement(int num) {int bitLen = Integer.toBinaryString(num).length();return bitExtracted(~num, bitLen, 1);}// Function to extract k bits from p position// and returns the extracted value as integerstatic int bitExtracted(int number, int leftIndex, int rightIndex) {System.out.println(Integer.toBinaryString(number));int i = ((1 << leftIndex) - 1) & (number >> (rightIndex - 1));System.out.println(Integer.toBinaryString(i));return i;}
}
2、简化版
class Solution {public int findComplement(int num) {int bitLen=Integer.toBinaryString(num).length();return ((1 << bitLen) - 1) & ~num;}
}

leetcode 476. 数字的补数(Java版)| How to extract ‘k’ bits from a given position in a number相关推荐

  1. Java实现 LeetCode 476 数字的补数

    476. 数字的补数 给定一个正整数,输出它的补数.补数是对该数的二进制表示取反. 示例 1: 输入: 5 输出: 2 解释: 5 的二进制表示为 101(没有前导零位),其补数为 010.所以你需要 ...

  2. LeetCode 476. 数字的补数(移位 异或^)

    1. 题目 给定一个正整数,输出它的补数.补数是对该数的二进制表示取反. 2. 解题 先求出该数的2进制有多少位 然后分别每位与1进行异或操作 class Solution {public:int f ...

  3. leetcode 476. 数字的补数(Number Complement)

    目录 题目描述: 示例 1: 示例 2: 解法: 题目描述: 给定一个正整数,输出它的补数.补数是对该数的二进制表示取反. 注意: 给定的整数保证在32位带符号整数的范围内. 你可以假定二进制数不包含 ...

  4. [leetcode]476. 数字的补数

    1. class Solution {public:int findComplement(int num) {int res = 0;int t = 0;string s = "" ...

  5. 476. 数字的补数

    476. 数字的补数 给你一个 正 整数 num ,输出它的补数.补数是对该数的二进制表示取反. 例 1:输入:num = 5 输出:2 解释:5 的二进制表示为 101(没有前导零位),其补数为 0 ...

  6. java rsa数字签名_RSA 数字签名算法(Java版)

    数字签名算法Java版 还是上代码吧 public static final String SIGN_ALGORITHMS = "SHA1WithRSA"; /** * RSA签名 ...

  7. RSA 数字签名算法(Java版)

    数字签名算法Java版 还是上代码吧 public static final String SIGN_ALGORITHMS = "SHA1WithRSA";/*** RSA签名* ...

  8. leetcode -874 - 模拟行走机器人 - java版

    文章目录 题目 代码 题目 机器人在一个无限大小的网格上行走,从点 (0, 0) 处开始出发,面向北方.该机器人可以接收以下三种类型的命令: -2:向左转 90 度 -1:向右转 90 度 1 < ...

  9. 【LeetCode】476. 数字的补数 Number Complement

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 公众号:负雪明烛 本文关键词:Leetcode, 力扣,476, 补数,二进制,Pyth ...

最新文章

  1. 便捷,轻巧的Groovy数据库操作
  2. thinkpad x230评测_全新改变超长续航 ThinkPad X230评测
  3. 皮一皮:这是。。。养了个白眼狼???
  4. Postgresql 物理热备份 -- 快照备份
  5. Python Json存储与读取
  6. python正则表达匹配汉字
  7. [伤了昨天的心 裂成碎片和沙一起飞]五香里脊
  8. 正确使用计算机网络,如何正确使用计算机网络
  9. 假如给Go语言加上注解,程序会变怎样?
  10. 档案管理系统,项目总结
  11. 多旅行商问题(MTSP)的相关论文总结
  12. 这么用 if-else,小鹿差点被辞退!
  13. MIT,Apache许可证是什么,看完这条你就懂了
  14. SpringBoot--任务:邮件任务
  15. 【HTML】关于height值设置和显示不同的原因以及font-size对象为中文和英文的区别
  16. transition和transition的区别
  17. dropbox免费容量_2020年免费云存储指南:Google Drive VS Dropbox VS iCloud VS OneDrive VS Amazon
  18. weblogic反序列化
  19. 根据经纬度画多边形(返回各个顶点坐标)
  20. centos破解root密码

热门文章

  1. MATLAB优化问题
  2. 0004-Median of Two Sorted Arrays(寻找两个正序数组的中位数)
  3. FaceBook机器学习开源DL模块
  4. codeforces contest 1140(D~G)
  5. 我所理解的设计模式(C++实现)—— “一句话总结”和索引
  6. cocos2d-x游戏实例(26)-简易动作游戏(4)
  7. socket通信的环形缓冲
  8. sqlite的几个常用方法
  9. C++ lambda 捕获模式与右值引用
  10. MySQL(八)MySQL性能优化