• [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:

    1. The given integer is guaranteed to fit within the range of a 32-bit signed integer.

    2. You could assume no leading zero bit in the integer’s binary representation.

    Example 1:

    Input: 5
    Output: 2
    Explanation: The binary representation of 5 is 101 (no leading zero bits), and its complement is 010. So you need to output 2.
    

    Example 2:

    Input: 1
    Output: 0
    Explanation: The binary representation of 1 is 1 (no leading zero bits), and its complement is 0. So you need to output 0.
    

    这里的complement number是指二进制上的补,两个数的二进制加起来全是1(不包括前面的0)

    用刚好比num大的二进制全是1的数-num就得到了complement number

    这个解法比较易懂,但从运行时间上看不是最优解

    int findComplement(int num)
    {
        int sum = 0;
        int tmp = 1;
        while (sum < num)
        {
            sum += tmp;
            tmp = tmp << 1;
        }
    
        return sum - num;
    }
    

    看看LeetCode上其他版本的代码,主要的代码是拿到二进制中最左边那个1

    #include <bits/stdc++.h>
    using namespace std;
    
    class Solution {
    public:
        int findComplement(int num) {
            int toggled = num;
    
            int topBit = static_cast<int>(log2(num));  //得到num的最左边一个1的位置(把leading zero排除在外)
            for (int iBit = 0; iBit <=topBit; iBit++) {
                toggled ^= (1 << iBit);     //(num的每一位和1做^操作取反)
            }
    
            return toggled;
        }
    };
    
    
  • 相关阅读:
    Spring Boot中的JSON技术
    Spring Boot中编写单元测试
    如何保证事务方法的幂等
    定时重试线程池
    多线程导致事务失效-记一次性能优化
    自己实现一个简单的数据库事务
    服务器错误码国际化
    spring自定义自动配置注解
    springboot中如何启动tomcat
    用grep来查询日志
  • 原文地址:https://www.cnblogs.com/arcsinw/p/9473291.html
Copyright © 2020-2023  润新知