首页 > 其他分享 >LeetCode 476.数字的补数(简单)

LeetCode 476.数字的补数(简单)

时间:2022-11-25 13:33:18浏览次数:48  
标签:题目 32 LeetCode 异或 num 476 101 补数

题目描述:

给你一个 整数 ​​num​​ ,输出它的补数。补数是对该数的二进制表示取反。

示例 1:

输入:num = 5
输出:2
解释:5 的二进制表示为 101(没有前导零位),其补数为 010。所以你需要输出 2 。

示例 2:

输入:num = 1
输出:0
解释:1 的二进制表示为 1(没有前导零位),其补数为 0。所以你需要输出 0 。

提示:

  • 给定的整数 ​​num​​ 保证在 32 位带符号整数的范围内。
  • ​num >= 1​
  • 你可以假定二进制数不包含前导零位。
  • 本题与 1009 https://leetcode-cn.com/problems/complement-of-base-10-integer/ 相同

题目分析:

这道题是 ​​LeetCode 190.颠倒二进制位(简单)​​​ 的变形题,运用按位异或的性质就能解决这道题,因为按位取反其实就是按位异或操作。例如:​​101 ^ 111 = 010​​​ 。所以,我们就要拿题目给出的数和按位数进行异或操作,获取位数的方法可以使用右移操作实现。对于获取按位数,我们可以使用 ​​1​​​ 左移 ​​num 的有效长度​​​ 再减去 ​​1​​​ 获得。例如,题目给出的 ​​num = 101​​​ ,得到有效位数为 ​​3​​​ ,再计算 ​​(1 << 3) - 1 = 111​​​ ,最后将 ​​num = 101​​​ 和 ​​111​​​ 进行异或操作得到答案 ​​010​​ 。

题解:

执行用时: 0 ms

内存消耗: 35.2 MB

class Solution {
public int findComplement(int num) {
// 如果 num 为 0 直接返回 1
if (num == 0) {
return 1;
}
// 临时变量
int temp = 0;
// 循环 32 次,题目给定的是 32 位无符号整数
for (int i = 0; i < 32; i++) {
// num 右移 i 位和 1 按位与
if (((num >> i) & 1) == 1) {
// 如果最低位是 1 更新 temp
temp = i + 1;
}
}
// 返回结果
// (1 << temp) - 1 得到与 num 相同长度的全 1 二进制数
// 和 num 进行异或操作即可得到答案
return num ^ ((1 << temp) - 1);
}
}

题目来源:力扣(LeetCode)




标签:题目,32,LeetCode,异或,num,476,101,补数
From: https://blog.51cto.com/u_15891283/5886574

相关文章

  • LeetCode 693.交替位二进制数(简单)
    题目描述:给定一个正整数,检查它的二进制表示是否总是0、1交替出现:换句话说,就是二进制表示中相邻两位的数字永不相同。示例1:输入:n=5输出:true解释:5的二进制表示是:101示......
  • LeetCode 268.丢失的数字(简单)
    题目描述:给定一个包含​​[0,n]​​​中​​n​​​个数的数组​​nums​​​,找出​​[0,n]​​这个范围内没有出现在数组中的那个数。进阶:你能否实现线性时间......
  • LeetCode 338.比特位计数(简单)
    题目描述:给你一个整数​​n​​​,对于​​0<=i<=n​​​中的每个​​i​​​,计算其二进制表示中​​1​​​的个数,返回一个长度为​​n+1​​​的数组​......
  • LeetCode 540.有序数组中的单一元素
    LeetCode540.有序数组中的单一元素题目链接:​​https://leetcode-cn.com/problems/single-element-in-a-sorted-array/​​题目描述:给定一个只包含整数的有序数组,每个元......
  • LeetCode 154.寻找旋转排序数组中的最小值II
    LeetCode154.寻找旋转排序数组中的最小值II题目链接:​​https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array-ii/​​题目描述:已知一个长度为 n ......
  • LeetCode 81.搜索旋转排序数组II
    LeetCode81.搜索旋转排序数组II题目链接:​​https://leetcode-cn.com/problems/search-in-rotated-sorted-array-ii/​​题目描述:已知存在一个按非降序排列的整数数组 n......
  • LeetCode 34.在排序数组中查找元素的第一个和最后一个位置
    LeetCode34.在排序数组中查找元素的第一个和最后一个位置题目链接:​​https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/​​......
  • LeetCode 76.最小覆盖子串
    LeetCode76.最小覆盖子串题目链接:​​https://leetcode-cn.com/problems/minimum-window-substring/​​题目描述:给你一个字符串 s 、一个字符串 t 。返回 s 中涵......
  • leetcode 104. 二叉树的最大深度 js实现
    给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null......
  • leetcode 344. 反转字符串 js实现
    编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用O(1)的额外空间解......