Leetcode 476.数字的补数

数字的补数

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

注意:

  1. 给定的整数保证在32位带符号整数的范围内。
  2. 你可以假定二进制数不包含前导零位。

示例 1:

输入: 5

输出: 2

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

示例 2:

输入: 1

输出: 0

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

【思路】

如果我们能知道该数最高位的1所在的位置,就可以构造一个长度和该数据所占位置一样长的一个掩码mask,然后概述和mask进行异或即可。

 1 public class Solution{
 2     public int findComplement(int num){
 3         int mask=1,temp=num;
 4         while(temp>0){
 5             mask=mask<<1;
 6             temp=temp>>1;
 7         }
 8         return num^(mask-1);
 9     }
10 }

原文地址:https://www.cnblogs.com/kexinxin/p/10372441.html

时间: 2024-11-14 13:11:15

Leetcode 476.数字的补数的相关文章

力扣(LeetCode)476. 数字的补数

给定一个正整数,输出它的补数.补数是对该数的二进制表示取反. 注意: 给定的整数保证在32位带符号整数的范围内. 你可以假定二进制数不包含前导零位. 示例 1: 输入: 5 输出: 2 解释: 5的二进制表示为101(没有前导零位),其补数为010.所以你需要输出2. 示例 2: 输入: 1 输出: 0 解释: 1的二进制表示为1(没有前导零位),其补数为0.所以你需要输出0. Java版 class Solution { public int findComplement(int num) {

476. 数字的补数

给定一个正整数,输出它的补数.补数是对该数的二进制表示取反. 注意: 给定的整数保证在32位带符号整数的范围内. 你可以假定二进制数不包含前导零位. 示例 1: 输入: 5 输出: 2 解释: 5的二进制表示为101(没有前导零位),其补数为010.所以你需要输出2. 示例 2: 输入: 1 输出: 0 解释: 1的二进制表示为1(没有前导零位),其补数为0.所以你需要输出0. 1 static const auto __ = []() 2 { 3 ios::sync_with_stdio(fa

476. 数字的补数python

给定一个正整数,输出它的补数.补数是对该数的二进制表示取反. 注意: 给定的整数保证在32位带符号整数的范围内. 你可以假定二进制数不包含前导零位. 示例 1: 输入: 5 输出: 2 解释: 5的二进制表示为101(没有前导零位),其补数为010.所以你需要输出2. 示例 2: 输入: 1 输出: 0 解释: 1的二进制表示为1(没有前导零位),其补数为0.所以你需要输出0. class Solution: def findComplement(self, num): """

LeetCode#476 Number Complement - in Swift

Given a positive integer, output its complement number. The complement strategy is to flip the bits of its binary representation. 給一個正整數,算出他的二補數 (2's complement). 二補數就是將該數字的二進制碼全部翻轉過來. Note: The given integer is guaranteed to fit within the range of

LeetCode 476. Number Complement (数的补数)

Given a positive integer, output its complement number. The complement strategy is to flip the bits of its binary representation. Note: The given integer is guaranteed to fit within the range of a 32-bit signed integer. You could assume no leading ze

leetcode consecutive-numbers 数字连续出现次数大于三次的数字

题目详情参见: https://leetcode.com/problems/consecutive-numbers/ 难度也只是medium,中等难度,阅读题意,也只是统计一下数字连续出现次数大于3次,例如,1,1,1,2,2,1 在这个序列中,只有1 连续出现了3次,最后显示1 即可,注意排除重复数字,即1 可能 1,1,1,2,2,1,1,1,1,这种情况下,显示一个1即可,在sql语句中添加 distinct过滤重复记录即可. 关键:定义变量统计数字的连续计数. select distin

LeetCode 476. Number Complement(easy难度c++)

题目: Given a positive integer, output its complement number. The complement strategy is to flip the bits of its binary representation. Note: The given integer is guaranteed to fit within the range of a 32-bit signed integer. You could assume no leadin

number to string - LeetCode【数字 =&gt; 字符串】

228. Summary Ranges 让我们找出连续的序列,然后首尾两个数字之间用个"->"来连接,那么我只需遍历一遍数组即可,每次检查下一个数是不是递增的,如果是,则继续往下遍历,如果不是了,我们还要判断此时是一个数还是一个序列,一个数直接存入结果,序列的话要存入首尾数字和箭头"->".我们需要两个变量i和j,其中i是连续序列起始数字的位置,j是连续数列的长度,当j为1时,说明只有一个数字,若大于1,则是一个连续序列

leetcode 201. 数字范围按位与 解题报告

给定范围 [m, n],其中 0 <= m <= n <= 2147483647,返回此范围内所有数字的按位与(包含 m, n 两端点). 示例 1: 输入: [5,7] 输出: 4 示例 2: 输入: [0,1] 输出: 0 思路分析 由于是按位与,那么某位一旦出现0,结果该位肯定是0.所以只需要考虑m,n都是1的位置.那么直接从高位开始,往低位走,直到遇到该为的数字不相等,将其后的数为都置为0,即为[m,n]之间所有的数字按位与的结果.代码如下 #include<bits/st