题目

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

题解

class Solution {public int findComplement(int num) {int i = Integer.numberOfLeadingZeros(num);return ~num << i >> i;}
}


也可以参考评论区的答案:

Idea:

  • Flip all bits using negation operator (~) [read more here]
  • Logical AND (&) with a bit a mask of size n whose all bits are set, where n = number of bits in num
    Example:
num = 5num binary = 0...0101~num binary = 1...1010* Now we've flipped all the bits but it also flipped previously insignificant bits (0s),
so to revert them back to 0s, we need to only keep the significant bits and turn off the insignificant bits.
* This can be done by using mask of 1s having size equal to number of bits in num. This mask is (1 << nBits) - 1.
* This is a standard mask in bit manipulation problems..~num binary & mask = (1...1010) & (0...0111) = 0...0010 [Ans]

T/S: O(1)/O(1)

public int findComplement(int num) {var nBits = (int) Math.floor((Math.log(num) / Math.log(2)) + 1);var mask = (1 << nBits) - 1;return ~num & mask;
}

1 liner variation of above method

public int findComplement(int num) {return ~num & (Integer.highestOneBit(num) - 1);
}

leetcode 476. Number Complement | 476. 数字的补数(位运算)相关推荐

  1. 263.Ugly Number||202 happy number||476 Number Complement||136 Single Number

    263.Ugly Number 判断因数是否只有素数2.3.5.. 感觉比较简单: class Solution(object):def isUgly(self, num):""& ...

  2. LeetCode 260. 只出现一次的数字 III(位运算)

    1. 题目 给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次. 找出只出现一次的那两个元素. 示例 :输入: [1,2,1,3,2,5] 输出: [3,5] 注意: 结 ...

  3. 476 Number Complement

    问题:给定一个整数,返回它的补数.补数的是将原数据的二进制表示反转.例如 5 的二进制位是 101,反转之后是:010,也就是整数2.所以输入5,返回2..输入1,返回0. 思路:取反操作是~,例如~ ...

  4. 程序员面试金典 - 面试题 17.19. 消失的两个数字(数学/位运算)

    1. 题目 给定一个数组,包含从 1 到 N 所有的整数,但其中缺了两个数字. 你能在 O(N) 时间内只用 O(1) 的空间找到它们吗? 以任意顺序返回这两个数字均可. 示例 1: 输入: [1] ...

  5. 程序员面试金典 - 面试题 17.04. 消失的数字(数学/位运算)

    1. 题目 数组 nums 包含从0到n的所有整数,但其中缺了一个. 请编写代码找出那个缺失的整数.你有办法在O(n)时间内完成吗? 注意:本题相对书上原题稍作改动 示例 1: 输入:[3,0,1] ...

  6. JSK-115 单独的数字(二)【位运算】

    单独的数字(二) 一个整型数组中有一个元素只出现一次,其它元素都出现两次.求出只出现一次的元素. 要求: 线性时间复杂度,不能使用额外空间. 聪明的你能搞定吗? 格式: 第一行输入数字n,代表有n个数 ...

  7. Leetcode 476. Number Complement 补数 解题报告

    1 解题思想 这道题给了一个正的整数,然后需要计算一个特殊的补数,这个补数的计算方式是: 1.对于这个整数num,转换成对应的二进制表示,这个二进制表示共有x位(不高于32) 2.将这x位取反后,得到 ...

  8. LeetCode 476. Number Complement

    题目: Given a positive integer, output its complement number. The complement strategy is to flip the b ...

  9. 【leetcode】【套路题】476. Number Complement

    一.题目描述 Given a positive integer, output its complement number. The complement strategy is to flip th ...

最新文章

  1. 传道、授业、解惑:俞士纶院长参加数据科学研究院第五届“院长接待日”
  2. OVS vswitchd启动(三十八)
  3. 280. Wiggle Sort
  4. python怎么编程输入坐标_python编程之API入门: (一)使用百度地图API查地理坐标...
  5. final+static
  6. 提交Form表单,submit之前做js判断处理
  7. 服务化改造实践(二)| Dubbo + Kubernetes
  8. mysql查询结果添加序号
  9. 浙江农林大学蓝桥杯程序设计竞赛校选拔赛(同步赛)签到题ABFGHIJ
  10. Linux总结----PS命令
  11. 台达触摸屏编程软件_松下PLC远程编程调试流程
  12. 计算机基础高一知识点,计算机基础全部知识点_.doc
  13. linux local root exploit,Linux非交互环境下本地提权思路与反思 linux localroot exploit
  14. JAX-RS 从傻逼到牛叉 2:开发一个简单的服务
  15. 16S测序 生物信息数据处理
  16. coalesce函数的用法
  17. linux学习笔记-第三课-ls,cd,alias,PASH,目录结构,快捷键
  18. 各种数据库的分类和比较
  19. php 判断号码运营商,PHP根据手机号判断运营商(详细介绍附代码)
  20. 国外常用的软件测试网站

热门文章

  1. 洛谷 - P4197 Peaks(Kruskal重构树+dfs序+主席树)
  2. POJ - 1201 Intervals(差分约束+最短路)
  3. POJ - 3417 Network(树上差分)
  4. Duilib教程-自动布局2
  5. WinDbg学习笔记(二)--字符串访问断点
  6. 使用MAP文件快速定位程序崩溃代码行
  7. Frida之安装和使用教程
  8. 高薪Java工程师必看的书籍
  9. 干趴面试官系列 | 请你简述一下Kafka中的分区分配
  10. 基于线性预测的语音编码原理解析