zoukankan      html  css  js  c++  java
  • [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;
        }
    };
    
    
  • 相关阅读:
    AsyncTask异步加载和HttpURLConnection网络请求数据
    The Vertu of the Dyamaund钻石
    英文finaunce金融
    Middle English finaunce金融
    金融finaunce财经
    英语fraunce法兰西
    France Alternative forms Fraunce
    python关于try except的使用方法
    java实现在线预览--poi实现word、excel、ppt转html
    static 关键字有什么作用
  • 原文地址:https://www.cnblogs.com/arcsinw/p/9473291.html
Copyright © 2011-2022 走看看