leetcode 476. 数字的补数(Java版)| How to extract ‘k’ bits from a given position in a number
题目
https://leetcode-cn.com/problems/number-complement/
思路
我们想要返回已知数字的补数(num>=1)。
思路:
- 获取 num 的二进制数
- 将 num 的二进制数取反
- 由于取反后,所有高位的 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.
- Right shift number by p-1.
- 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相关推荐
- Java实现 LeetCode 476 数字的补数
476. 数字的补数 给定一个正整数,输出它的补数.补数是对该数的二进制表示取反. 示例 1: 输入: 5 输出: 2 解释: 5 的二进制表示为 101(没有前导零位),其补数为 010.所以你需要 ...
- LeetCode 476. 数字的补数(移位 异或^)
1. 题目 给定一个正整数,输出它的补数.补数是对该数的二进制表示取反. 2. 解题 先求出该数的2进制有多少位 然后分别每位与1进行异或操作 class Solution {public:int f ...
- leetcode 476. 数字的补数(Number Complement)
目录 题目描述: 示例 1: 示例 2: 解法: 题目描述: 给定一个正整数,输出它的补数.补数是对该数的二进制表示取反. 注意: 给定的整数保证在32位带符号整数的范围内. 你可以假定二进制数不包含 ...
- [leetcode]476. 数字的补数
1. class Solution {public:int findComplement(int num) {int res = 0;int t = 0;string s = "" ...
- 476. 数字的补数
476. 数字的补数 给你一个 正 整数 num ,输出它的补数.补数是对该数的二进制表示取反. 例 1:输入:num = 5 输出:2 解释:5 的二进制表示为 101(没有前导零位),其补数为 0 ...
- java rsa数字签名_RSA 数字签名算法(Java版)
数字签名算法Java版 还是上代码吧 public static final String SIGN_ALGORITHMS = "SHA1WithRSA"; /** * RSA签名 ...
- RSA 数字签名算法(Java版)
数字签名算法Java版 还是上代码吧 public static final String SIGN_ALGORITHMS = "SHA1WithRSA";/*** RSA签名* ...
- leetcode -874 - 模拟行走机器人 - java版
文章目录 题目 代码 题目 机器人在一个无限大小的网格上行走,从点 (0, 0) 处开始出发,面向北方.该机器人可以接收以下三种类型的命令: -2:向左转 90 度 -1:向右转 90 度 1 < ...
- 【LeetCode】476. 数字的补数 Number Complement
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 公众号:负雪明烛 本文关键词:Leetcode, 力扣,476, 补数,二进制,Pyth ...
最新文章
- 便捷,轻巧的Groovy数据库操作
- thinkpad x230评测_全新改变超长续航 ThinkPad X230评测
- 皮一皮:这是。。。养了个白眼狼???
- Postgresql 物理热备份 -- 快照备份
- Python Json存储与读取
- python正则表达匹配汉字
- [伤了昨天的心 裂成碎片和沙一起飞]五香里脊
- 正确使用计算机网络,如何正确使用计算机网络
- 假如给Go语言加上注解,程序会变怎样?
- 档案管理系统,项目总结
- 多旅行商问题(MTSP)的相关论文总结
- 这么用 if-else,小鹿差点被辞退!
- MIT,Apache许可证是什么,看完这条你就懂了
- SpringBoot--任务:邮件任务
- 【HTML】关于height值设置和显示不同的原因以及font-size对象为中文和英文的区别
- transition和transition的区别
- dropbox免费容量_2020年免费云存储指南:Google Drive VS Dropbox VS iCloud VS OneDrive VS Amazon
- weblogic反序列化
- 根据经纬度画多边形(返回各个顶点坐标)
- centos破解root密码