LeetCode.1009-十进制数的补码(Complement of Base 10 Integer)
这是小川的第377次更新,第404篇原创
01 看题和准备
今天介绍的是LeetCode算法题中Easy级别的第238题(顺位题号是1009)。每个非负整数N都具有二进制表示。例如,5可以二进制表示为"101",11可以二进制表示为"1011",依此类推。
请注意,除N = 0外,任何二进制表示中都没有前导零。
二进制表示的补码是将1改为0和将0改为1时得到的二进制数。例如,二进制中"101"的补码是二进制的"010"。
对于给定的十进制数N,将其二进制表示的补码作为十进制的整数返回。
例如:
输入:5
输出:2
说明:5是二进制"101",二进制补码"010",转为十进制是2。
输入:7
输出:0
说明:7是二进制"111",二进制补码"000",转为十进制是0。
输入:10
输出:5
说明:10是二进制"1010",二进制补码"0101",转为十进制是5。
注意:
- 0 <= N < 10^9
02 第一种解法
题目的意思是将N转为二进制,再求其二进制的补码(0和1互换),再将转换后的二进制补码转为十进制整数。
思路:利用异或位运算,例如5^7=2,那么我们要找到7,而7的二进制为111,长度和5的二进制101相等,但是全为1,所以先将5转为二进制字符串,使用一个32位长度的由1组成的字符串,截取对应长度的子串,再将截取出来的子串转为十进制数,利用得到的十进制数和N做异或运算就可得到结果。
public int bitwiseComplement(int N) {
String str = Integer.toBinaryString(N);
String newStr = "11111111111111111111111111111111";
newStr = newStr.substring(0, str.length());
int num = Integer.valueOf(newStr, 2);
return N^num;
}
03 第二种解法
思路:将N转为二进制字符串,利用循环,将其中的0转为1,1转为0,变成新的二进制字符串,再将其转为十进制整数。
public int bitwiseComplement2(int N) {
String str = Integer.toBinaryString(N);
StringBuilder sb = new StringBuilder();
for (int i=0; i<str.length(); i++) {
sb.append(str.charAt(i) == '0' ? '1' : '0');
}
return Integer.valueOf(sb.toString(), 2);
}
04 第三种解法
思路和第一种解法类似,只是换了另外的方式来得到全是1的二进制数,全是1的二进制数可以通过1开头后面跟0的二进制数减1得到,例如8的二进制数1000,8减去1得到7,7的二进制数是111,而8可以通过1左移位运算3得到(也可以累乘2三次得到)。
public int bitwiseComplement3(int N) {
if (N < 2) {
return N == 0 ? 1 : 0;
}
int num = 1;
while (num <= N) {
// 换成 num *= 2; 效果一样
num <<= 1;
}
return N^(num-1);
}
05 小结
算法专题目前已连续日更超过七个月,算法题文章244+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。
以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,好看、留言、转发就是对我最大的回报和支持!
LeetCode.1009-十进制数的补码(Complement of Base 10 Integer)的更多相关文章
- [Swift]LeetCode1009. 十进制整数的补码 | Complement of Base 10 Integer
Every non-negative integer N has a binary representation. For example, 5 can be represented as &quo ...
- LeetCode 1012 Complement of Base 10 Integer 解题报告
题目要求 Every non-negative integer N has a binary representation. For example, 5 can be represented as ...
- #Leetcode# 1009. Complement of Base 10 Integer
https://leetcode.com/problems/complement-of-base-10-integer/ Every non-negative integer N has a bina ...
- 【LeetCode】1012. Complement of Base 10 Integer 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- 【leetcode】1012. Complement of Base 10 Integer
题目如下: Every non-negative integer N has a binary representation. For example, 5 can be represented a ...
- 128th LeetCode Weekly Contest Complement of Base 10 Integer
Every non-negative integer N has a binary representation. For example, 5 can be represented as &quo ...
- 力扣(LeetCode)1009. 十进制整数的反码
每个非负整数 N 都有其二进制表示.例如, 5 可以被表示为二进制 "101",11 可以用二进制 "1011" 表示,依此类推.注意,除 N = 0 外,任何 ...
- Java中实现十进制数转换为二进制的三种思路
Java中实现十进制数转换为二进制 第一种:除基倒取余法 这是最符合我们平时的数学逻辑思维的,即输入一个十进制数n,每次用n除以2,把余数记下来,再用商去除以2...依次循环,直到商为0结束,把余数倒 ...
- 在Java中,为什么十六进制数0xFF取反之后对应的十进制数是-256呢?
int number = 0xFF: 字面值是指在程序中无需变量保存,可直接表示为一个具体的数字或字符串的值. 0xFF是一个整数字面值,整数字面值的缺省类型是 int. 我们知道在Java中, in ...
随机推荐
- 三大方面,分析 to B和 to C产品的区别
作为互联网从业者,我们经常听到to B(或2B)和to C(或2C)两个概念.to B即面向企业客户,to C即面向普通用户.只要是互联网人基本都懂知道这两个概念,但如果别人再问“to B和to C产 ...
- 一个原生ajax在jetbrains开发平台的调用方法
这段随笔的记述目的无非是,一个html页面中可能有多段js代码,所以采用外引的方法应该会好一些 function checkfiles() { var xhr = new XMLHttpRequest ...
- qt5-Qt Creator使用
设置编码: 工具-->选项-->文本编辑器-->行为-->编辑器 中文编译失败的解决: 编辑-->--> 在头文件中增加:--解决乱码问题(文本所在的头文件) #i ...
- 利用rand7() 产生rand10()(腾讯)
题目1:已知rand7() 可以产生 1~7 的7个数(均匀概率),利用rand7() 产生rand10() 1~10(均匀概率) int rand10() { int temp; int te ...
- C++:std::map的遍历
for (auto &kv : myMap) { count<<kv.first<<" has value "<<kv.second&l ...
- Codeforces #499 E Border ( 裴蜀定理 )
题目链接 题意 : 给出 N 种纸币.并且给出面值.每种纸币的数量可以任选.问你得出来的数在 k 进制下.末尾位的数有多少种可能.输出具体方案 分析 : 纸币任意选择组成的和 可以用一个一次多项式来表 ...
- Nowcoder Circulant Matrix ( FWT )
题目链接 题意 : 给你一个a数组和b数组,构造出A[i][j]矩阵(A[i][j] = a[i xor j]) 给出等式 A * x = b ( mod p ) n等于4的时候有: A[0][0]* ...
- set总结
set 定义 列表的特性: 可修改 无序 不重复 列表的创建: 1.直接创建; s = {'a', 1, 'c'} 2.set() 创建一个空set; s = set() 3.set(it ...
- Springboot 使用JPA
Springboot 使用jpa maven依赖 <dependency> <groupId>org.springframework.boot</groupId> ...
- js+jq 淡入淡出轮播(点击+定时+鼠标进入移出事件)
<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title> ...