1009. Complement of Base 10 Integer

2023-12-21 16:32
文章标签 integer base 1009 complement

本文主要是介绍1009. Complement of Base 10 Integer,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1009. 十进制整数的反码

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

二进制的反码表示是将每个 1 改为 0 且每个 0 变为 1。例如,二进制数 "101" 的二进制反码为 "010"

给定十进制数 N,返回其二进制表示的反码所对应的十进制整数。

 

    示例 1:

    输入:5
    输出:2
    解释:5 的二进制表示为 "101",其二进制反码为 "010",也就是十进制中的 2 。
    

    示例 2:

    输入:7
    输出:0
    解释:7 的二进制表示为 "111",其二进制反码为 "000",也就是十进制中的 0 。
    

    示例 3:

    输入:10
    输出:5
    解释:10 的二进制表示为 "1010",其二进制反码为 "0101",也就是十进制中的 5 。
    

     

    提示:

    1. 0 <= N < 10^9

    解法一

    //时间复杂度O(1), 空间复杂度O(1)
    class Solution {
    public:int bitwiseComplement(int N) {if(N == 0) return 1;int temp = log2(N);//32位int,temp最大是30int mask = (((1 << temp) - 1) << 1) + 1;return ~N & mask;}
    };

    思路:

    题目条上规定N是非负数(最高二进制位一定是1),我们第一步需要找到N的最高位的位置,令temp = log2(N),这就是最高二进制位出现的位置(个位为第0位)。然后构造出一个蒙版mask,其中高于temp的位全为0,小于低于temp的位全为1。然后~N & mask就是我们要的答案。例如:

    输入: N = 555 (二进制表示为 0010 0010 1011b)计算 temp = log2(N) = log2(555) = 9
    因为                1 << 9 = 0010 0000 0000b(1 << 9) - 1 = 0001 1111 1111b
    (((1 << 9) - 1) << 1 ) - 1 = 0011 1111 1111b
    所以        mask = 0011 1111 1111b~N = 1101 1101 0100b~N & mask = 0001 1101 0100b = 468返回: 468
    
    2019/08/30 21:24

    这篇关于1009. Complement of Base 10 Integer的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



    http://www.chinasem.cn/article/520707

    相关文章

    docker学习系列(四)制作基础的base项目镜像--jdk+tomcat

    前面已经完成了docker的安装以及使用,现在我们要将自己的javaweb项目与docker结合 1.1准备jdk+tomcat软件 ​​我下载了apache-tomcat-7.0.68.tar.gz和jdk-7u79-linux-x64.tar.gz,存储于Linux机器的本地目录/usr/ect/wt/下(利用xshell上传)。利用linux命令 tar -zxvf apache-tom

    Base64编码 及 在HTML中用Base编码直接显示图片或嵌入其他文件类型

    1.为什么要用到BASE64编码的图片信息      Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一。Base64 主要不是加密,它主要的用途是把一些二进制数转成普通字符用于网络传输。由于一些二进制字符在传输协议中属于控制字符,不能直接传送需要转换一下。最常见的用途是作为电子邮件或WebService附件的传输编码.  2.base64编码定义    目前的internet

    如何简便的将List<Integer>转换成int[]?

    使用Java 8的流(Streams)  ArrayList<Integer> list = new ArrayList<>();int[] intArray = list.stream().mapToInt(Integer::intValue).toArray();  若是maven项目可使用Apache Commons Lang库 <dependency> <groupId>

    [LeetCode] 7. Reverse Integer

    题:https://leetcode.com/problems/reverse-integer/description/ 题目 Given a 32-bit signed integer, reverse digits of an integer. Example 1: Input: 123Output: 321Example 2:Input: -123Output: -321Ex

    2015 Multi-University Training Contest 5 1009 MZL#39;s Border

    MZL's Border  Problem's Link:  http://acm.hdu.edu.cn/showproblem.php?pid=5351   Mean:  给出一个类似斐波那契数列的字符串序列,要你求给出的f[n]字符串中截取前m位的字符串s中s[1...i] = s[s.size()-i+1....s.size()]的最大长度。 analyse:   过计算

    LeetCode - 12. Integer to Roman

    12. Integer to Roman  Problem's Link  ---------------------------------------------------------------------------- Mean:  将一个int型的整数转化为罗马数字. analyse: 没什么好说的,直接维基百科. Time complexity: O(

    获取一个event_base

    原文链接:http://www.wangafu.net/~nickm/libevent-book/Ref2_eventbase.html 创建一个event_base 在你使用任何有意思的Libevent函数之前,你需要分配一个或多个event_base结构.每一个event_base结构含有一组events,并且可以告知你哪一些events是就绪的. 如果一个event_base是以加锁模

    base_dir.replace(‘\‘,‘/‘)报错SyntaxError: unterminated string literal

    base_dir.replace(‘’,‘/’)报错 报错解释: 这个报错信息表明你在尝试使用Python中的replace方法来替换字符串中的字符时出现了问题。具体来说,base_dir.replace(‘’,‘/’)这行代码中,你试图将base_dir字符串中的反斜杠\替换为斜杠/,但是你的代码中反斜杠前的反斜杠是一个转义字符,它本应用来转义后面的字符。 问题可能是你在一个字符串中使

    解决Can‘t load tokenizer for ‘bert-base-chinese‘.问题

    报错提示: OSError: Can't load tokenizer for 'bert-base-chinese'. If you were trying to load it from 'https://huggingface.co/models', make sure you don't have a local directory with the same name. Otherwi

    带小数的String转整数Integer

    其实String和Integer、Float、Double等相互转换这都很容易。可是带小数的String转Float、Double可能会出现“模糊数字”。 那么怎么避免呢?见下实例和结论。 System.out.println("**********2.4***********");String a = "2.4"; System.out.println(a); // 2.4System.o