一、题目
函数原型:
int findComplement(int num)
二、思路将num的每一位取出来,取反后,乘以2的位次方,最终所有结果相加即可得到结果。
++如何取出num的每一位?++
num&1:取出num的最低位
num>>1:num算数右移1,最高位补符号位(由于num为整数,所以最高位补0)
++如何将取出的每一位取反?++
(num&1)^1:按位异或1,如果是0则取反为1,如果是1则取反为0
三、代码
cppint findComplement(int num) { int result=0; int i=0; while(num) { result+=pow(2,i)*(num&1^1); i++; num=num>>1; } return result; }
leetcode:476. 数字的补数
南林yan2023-11-16 17:34
相关推荐
csdn_aspnet13 小时前
PHP 算法 LeetCode 编号 70 - 爬楼梯沈浩(种子思维作者)13 小时前
没有错误,正确将一文不值x_xbx14 小时前
LeetCode:5. 最长回文子串快手技术14 小时前
免费报名|生成式推荐技术如何实现体系化演进?快手技术沙龙第四期开启!初夏睡觉14 小时前
数字截断求和 题解AZaLEan__14 小时前
多源 BFSsmith成长之旅14 小时前
07 | Mem0 框架分析:三路信号融合——语义 + BM25 + Entity Boost 的混合检索wabs66614 小时前
关于贪心算法章节的【有两个维度问题】的自我总结未若君雅裁14 小时前
算法复杂度与数据结构:Java 集合篇的第一块基石春日见15 小时前
五分钟入门 强化学习---Q-Learning算法与实现