LeetCode刷题之1009. 十进制整数的反码

LeetCode刷题之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
  • 代码1:
class Solution(object):
    def bitwiseComplement(self, N):
        """
        :type N: int
        :rtype: int
        """
        n = 0
        S = 0
        if N == 0:
            return 1
        while(2**n <= N):
            if 2 ** n <= N:
                S = S + 2 ** n
                n = n + 1
        return (N ^ S)
# 执行用时 :48 ms, 在所有Python3提交中击败了95.87%的用户
# 内存消耗 :13.1 MB, 在所有Python3提交中击败了83.01%的用户
  • 算法说明:
    首先判断N == 0时的情况,然后判断N转换为二进制时共有几位数字,当判断有几位二进制的过程中,生成对应位数的全是1的二进制数字111……111。然后返回NS的异或结果即可。
  • 代码2:
class Solution(object):
    def bitwiseComplement(self, N):
        """
        :type N: int
        :rtype: int
        """
        s = bin(N)[::-1]
        k = 0
        for i in range(len(str(s))-2):
            if s[i] == '0':
                k = k + (2**i)
        return k
# 执行用时 :68 ms, 在所有Python3提交中击败了33.49%的用户
# 内存消耗 :13 MB, 在所有Python3提交中击败了92.28%的用户
  • 算法说明:
    首先将N转换为二进制字符串格式,然后翻转;利用for循环判断对应位置的字符是“1”或者“0”,如果是“0”则该位数字在反转之后是“1”,用k = k + (2**i)进行累加计算,输出结果即可。

猜你喜欢

转载自blog.csdn.net/qq_34331113/article/details/106626781