
1009 十进制整数的反码(模拟)
发布日期:2021-05-07 21:56:23
浏览次数:18
分类:精选文章
本文共 1557 字,大约阅读时间需要 5 分钟。
1. 问题描述:
每个非负整数 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 。提示:
0 <= N < 10^9
本题与 476:https://leetcode-cn.com/problems/number-complement/ 相同来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/complement-of-base-10-integer2. 思路分析:
① 分析题目可以知道我们模拟整个过程即可,使用循环依次计算十进制数字N对应的二进制数字的每一位并且存储到一个列表中,使用另外一个循环将列表的值取反(与1进行异或操作就可以取反)然后去除列表中的前导0,最后遍历列表计算对应的十进制数字即可
② 因为是取反操作,所以可以知道N与取反之后的数字相加之后等于n,其中n的位数与N的二进制位数相等,并且n的二进制位中每一位都是1,基于这个想法我们可以求解出N对应的二进制位数,然后计算全为1的数值,减去N那么就是最终的结果了
python计算二进制的位数可以使用:(int)math.log(N, 2) + 1,也就是log2N + 1,或者是使用bin函数获取数字N对应的二进制字符串然后len(bin) - 2得到的就是二进制数字的长度
3. 代码如下:
class Solution: def bitwiseComplement(self, N: int) -> int: if N == 0: return 1 nums = list() # 计算十进制数字对应的二进制字符串 while N > 0: nums.insert(0, N % 2) N //= 2 for i in range(len(nums)): # 与1异或相当于是取反 nums[i] ^= 1 j = 0 while j < len(nums): if nums[j] != 0: break else: j += 1 if j < len(nums): nums = nums[j:] res, base = 0, 1 # 逆序遍历 for i in range(len(nums) - 1, -1, -1): if nums[i] != 0: res += base base *= 2 return res
发表评论
最新留言
很好
[***.229.124.182]2025年03月28日 10时11分30秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
项目中常用的审计类型概述
2019-03-05
nodeName与tagName的区别
2019-03-05
(九)实现页面底部购物车的样式
2019-03-05
python-day3 for语句完整使用
2019-03-05
可重入和不可重入函数
2019-03-05
(2.1)关系模型之关系结构和约束
2019-03-05
androidstudio同步的时候下载jcenter的库出错解决办法
2019-03-05
ButterKnife使用问题
2019-03-05
01 背包问题
2019-03-05
ILI9341几个重要的命令
2019-03-05
为什么讨厌所谓仿生AI的说法
2019-03-05
ORACLE 客户端工具
2019-03-05
Pyinstaller打包的exe文件过大的解决方法
2019-03-05
Linux的软链接跟Windows快捷方式一样?
2019-03-05
使用第三方sdk,微信wechat扫码登录
2019-03-05
mysql中的行转列
2019-03-05
基于LabVIEW的入门指南
2019-03-05
PCB布局系列汇总
2019-03-05
2019CCPC女生专场赛_K - Tetris_打表/模拟_暴力之王
2019-03-05