剑指Offer 二进制中一的个数

1 链接:https://www.nowcoder.com/questionTerminal/8ee967e43c2c4ec193b040ea7fbb10b8 2 来源:牛客网 3 4 public class Solution { 5 //从n的2进制形式的最右边开始判断是不是1 6 /* 7 * 该解法如果输入时负数会陷入死循环, 8 * 因为负数右移时,在最高位补得是1 9 * 二本题最终目的是求1的个数,那么会有无数个 10 * 1了。 11 */ 12 //-------------可能陷入死循环的解法--------------------- 13 public static int NumberOf1_CanNotUse(int n) { 14 int count = 0; 15 while (n != 0) { 16 /* 17 * 用1和n进行位与运算, 18 * 结果要是为1则n的2进制形式 19 * 最右边那位肯定是1,否则为0 20 */ 21 if ((n & 1) == 1) { 22 count++; 23 } 24 //把n的2进制形式往右推一位 25 n = n >> 1; 26 } 27 return count; 28 } 29 //---------------正解-------------------------------- 30 //思想:用1(1自身左移运算,其实后来就不是1了)和n的每位进行位与,来判断1的个数 31 private static int NumberOf1_low(int n) { 32 int count = 0; 33 int flag = 1; 34 while (flag != 0) { 35 if ((n & flag) != 0) { 36 count++; 37 } 38 flag = flag << 1; 39 } 40 return count; 41 } 42 //--------------------最优解---------------------------- 43 public static int NumberOf1(int n) { 44 int count = 0; 45 while (n != 0) { 46 ++count; 47 n = (n - 1) & n; 48 } 49 return count; 50 } 51 public static void main(String[] args) { 52 //使用n=10,二进制形式为1010,则1的个数为2; 53 int n = -10; 54 System.out.println(n + "的二进制中1的个数:" + NumberOf1(n)); 55 } 56 }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· SQL Server如何跟踪自动统计信息更新?
· “你见过凌晨四点的洛杉矶吗?”--《我们为什么要睡觉》
· C# 从零开始使用Layui.Wpf库开发WPF客户端
· 编程神器Trae:当我用上后,才知道自己的创造力被低估了多少
· C#/.NET/.NET Core技术前沿周刊 | 第 31 期(2025年3.17-3.23)
· 接口重试的7种常用方案!