这是小川的第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)的更多相关文章

  1. [Swift]LeetCode1009. 十进制整数的补码 | Complement of Base 10 Integer

    Every non-negative integer N has a binary representation.  For example, 5 can be represented as &quo ...

  2. LeetCode 1012 Complement of Base 10 Integer 解题报告

    题目要求 Every non-negative integer N has a binary representation.  For example, 5 can be represented as ...

  3. #Leetcode# 1009. Complement of Base 10 Integer

    https://leetcode.com/problems/complement-of-base-10-integer/ Every non-negative integer N has a bina ...

  4. 【LeetCode】1012. Complement of Base 10 Integer 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  5. 【leetcode】1012. Complement of Base 10 Integer

    题目如下: Every non-negative integer N has a binary representation.  For example, 5 can be represented a ...

  6. 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 ...

  7. 力扣(LeetCode)1009. 十进制整数的反码

    每个非负整数 N 都有其二进制表示.例如, 5 可以被表示为二进制 "101",11 可以用二进制 "1011" 表示,依此类推.注意,除 N = 0 外,任何 ...

  8. Java中实现十进制数转换为二进制的三种思路

    Java中实现十进制数转换为二进制 第一种:除基倒取余法 这是最符合我们平时的数学逻辑思维的,即输入一个十进制数n,每次用n除以2,把余数记下来,再用商去除以2...依次循环,直到商为0结束,把余数倒 ...

  9. 在Java中,为什么十六进制数0xFF取反之后对应的十进制数是-256呢?

    int number = 0xFF: 字面值是指在程序中无需变量保存,可直接表示为一个具体的数字或字符串的值. 0xFF是一个整数字面值,整数字面值的缺省类型是 int. 我们知道在Java中, in ...

随机推荐

  1. 使用rpm安装mysql5.6(简单安装 实验使用)

    [root@localhost mysql]# cd /usr [root@localhost mysql]# mkdir mysql [root@localhost mysql]# cd mysql ...

  2. 添加了两个IP

    //第一步:添加了两个IP root@default:~# ifconfig eth1:0 192.168.99.10 netmask 255.255.255.0 up root@default:~# ...

  3. Linux内核编译完整过程

    Linux内核编译完整过程 通过网上的资料我自己的实际内核编译,我把对Linux内核编译的过程写在这里,也许对其他的Linux爱好者的编译学习有些帮助,其中很大部分是网上的资料,另外就是我在实际编译过 ...

  4. mysql更改列属性的一些用法

    更改mysql 主键属性 alter table rbac_auth change column id id int auto_increment

  5. shell学习——关于shell函数库的使用

    shell函数库的理解: 个人理解,shell函数库实质为一个脚本,脚本内包含了多个函数(函数具有普遍适用性). shell函数库的调用: 通过  . /path/lib/file.lib 或者 so ...

  6. 【传输管理③】Client集团间的传输(例:开发环境300→310,300→320)

    之前有提到: 每个环境可能有若干个Client(客户端/集团),且每个Client用途都不一样. 如下图所示,开发环境就有300,310和320三个Client. 假设开发人员在Client300中新 ...

  7. count(列) count(*)

    总结:但是真的结论是这样的么.其实不然.其实在数据库中count(*)和count(列)根本就是不等价的,count(*)是针对于全表的,而count(列)是针对于某一列的,如果此列值为空的话,cou ...

  8. java 项目 文件关系 扫描 注释注入

    https://blog.csdn.net/congweijing/article/details/82499627 controller.service.serviceImpl.Mapper.Xml ...

  9. Ubuntu:打开JPEG文件错误(Not a JPEG File: starts with 0x52 0x49)

    Ubuntu 16.04.4,造冰箱的大熊猫@cnblogs 2018/7/12 近日下载资料时得到一些后缀为jpg的图片文件.这些图片在手机上能够正常预览,但在Ubuntu的文件管理器中无法预览这些 ...

  10. TCP如何保证可靠传输

    TCP 协议如何保证可靠传输   一.综述 1.确认和重传:接收方收到报文就会确认,发送方发送一段时间后没有收到确认就重传. 2.数据校验 3.数据合理分片和排序: UDP:IP数据报大于1500字节 ...