专栏首页Gvoidy备份小站python中进制互换

python中进制互换

十进制转二进制

bin() 返回一个整数 int 或者长整数 long int 的二进制表示。

>>>bin(10)
'0b1010'
>>> bin(20)
'0b10100'

二进制转十进制

>>>int('0b1010', 2)
'10'
>>>int('0b10100', 2)
'20'

LeetCode 相关题目 476. 数字的补数

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

注意:

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

示例1:

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

示例2:

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

我的解法(83.7%):

暴力解法,把数字转换成二进制字符串去掉0b, 用遍历的方法取字符串补码, 再转回十进制数。

class Solution:
    def findComplement(self, num):
        """
        :type num: int
        :rtype: int
        """
        str_num = str(bin(num))[2:]
        anti_num = []
        for e, i in enumerate(str_num):
            if i == '0':
                anti_num.append("1")
            else:
                anti_num.append("0")
        anti_num.insert(0, "0b")
        anti_num = "".join(anti_num)
        return int(anti_num, 2)       

最优解:

class Solution:
    def findComplement(self, num): 
        """
        :type num: int
        :rtype: int
        """
        n = len(bin(num))-2
        return num^(2**n-1)

思路是,取出去除0b的二进制数‘长度’ n, 通过n求出num‘位数’全置1的十进制数, 在与num亦或即可得到补数。(补数的性质啊喂。。。这都没想出来)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python 元组解包的几种方法

    要将一个tuple中的所有值作为参数,如果直接用上面两种方法就不太 pythonic了,可以用以下方法解包

    Ewdager
  • 几个简单二叉树的 Python 实现

    Ewdager
  • 经典排序算法 Python 实现

    在操作过程中维护一个排好序的片段,初始只包含一个元素。每次从未排序的片段取出一个元素插入正确的位置。时间复杂度为O(n²)

    Ewdager
  • LintCode-365.二进制中有多少个1

    给定 32 (100000),返回 1 给定 5 (101),返回 2 给定 1023 (111111111),返回 9

    悠扬前奏
  • 面试题解:输入一个数A,找到大于A的一个最小数B,且B中不存在连续相当的两个数字

    昨天发的算法有一处情况没考虑到,比如加一后有进位,导致又出现重复数字的情况,修正后今天重新发一次。

    用户1631416
  • 用Java实现JVM第七章《方法调用和返回》

    案例介绍 本章节主要用java实现;方法调用指令、返回指令、解析方法符号引用、参数传递等。实现新的指令后我们的虚拟机就可以执行稍微复杂的运算并输出结果。

    小傅哥
  • 计蒜客蓝桥杯模拟赛 九宫格

    题目 将数字 1…9 填入一个3×3 的九宫格中,使得格子中每一横行和的值全部相等,每一竖列和的值全部相等。请你计算有多少种填数字的方案。

    用户4492257
  • 丑数

    一份执着✘
  • LeetCode | 2 的幂

    这题也是比较容易的一题,前提是找到规律即可。如果从 10 进制的角度观察 2 的幂次方,可能并不容易发现规律,那么可以从 2 进制的角度进行观察...

    码农UP2U
  • leetcode 31 Next Permutation

    @坤的

扫码关注云+社区

领取腾讯云代金券