首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

剑指offer--二进制中1的个数

C++代码思路 这题有3种思路。第一种:让n与1相与后判断是否为真,若为真,计数器cnt加一并将n右移1位直至n为0。这种思路受限于n是否为正数,若n为负数,那么每次右移最高位补1而非0,那么这会导致死循环。第二种:将第一种思路反过来思考,将flag = 1与n相与,若为真,cnt++,每次将flag左移一位,那么这种解法的时间复杂度与n的2进制数的位数一样,效率不高。第三种:一个数n如果减1,那么将这个2进制数从右向左的第一个“1”变成0,若这个1不是最低位,那么之后的所有位取反,而这个1左边的所有位保持不变。那么n与n-1相与可以使从右向左的第一个1与其之后的位变成0,那么这个2进制数有几个1,只需几次上述操作即可。

01
领券