AcWing25:二进制数中1的个数

最近,尝试做一些很简单很简单的算法题,有点头秃(本小白比较菜,让大家见笑了,哈哈哈),但是看到老婆的照片,瞬间好开心!
在这里插入图片描述

原题

二进制中1的个数
在这里插入图片描述

解决办法一

作为JAVA专业的学生,第一次,我借助了JAVA中已经实现好的方法来解决本问题,偷个懒:
类Integer中,已经定义好了可以求二进制数中1的个数的方法,那就偷个懒用一下:
在这里插入图片描述

public class Ninth {

	public static void main(String[] args) {
		int result = NumberOf1(-2);
		System.out.println(result);

	}
	
	 public static int NumberOf1(int n)
	 {
//		 注意:Integer是一个类,而int只是java中的基本数据类型;
//		 Integer integer = n;
//		 int result = integer.bitCount(n);
//		 return result;
		 
		 return Integer.bitCount(n);
	 }
}

在这里插入图片描述

小笔记:int 类型数据转化为Integer

在这里插入图片描述
在这里插入图片描述

解决办法二

首先来简单介绍一下lowbit(),lowbit(x)的值是x的二进制表达式中最低位的1所对应的十进制值。通俗点来说,lowbit(x)是将 x 转化成二进制数之后,只保留最低位(从右往左数,第一位)的1及其后面的0,截断前面的内容,然后再转成10进制数。

举个列子,lowbit(6) = 2,lowbit(7) = 1
原数二进制lowbit(x)
611021 = 2
711120 = 1

关于lowbit函数的实现方式,本小白已经在另外一篇博客中做了详细介绍,感兴趣的小伙伴们可以参考一下啊!
浅谈lowbit运算

言归正传,我们接着来解决问题:
lowbit函数有两种实现方式:

x&-x
或者
x&(x^(x-1))

(原理在另外一篇博客中已经讲了,小伙伴们可以参考:浅谈lowbit运算

public class NinthOne {

	public static void main(String[] args) {
		int result = NumberOf1(-2);
		System.out.println(result);
	}
	
	 public static int NumberOf1(int n)
	 {
		 int result = 0;
		 while(n!=0) {
//			 两种方法求lowbit的值都可以:n&-n 或者  n&(n^(n-1))
//			 n = n - (n & -n);
			 n = n- (n & (n ^ (n - 1)));
			 result++;
		 }
		 
		 return result;
	 }

}

在这里插入图片描述
在这里插入图片描述
解题思路

lowbit(n) 运算可以求出 二进制数中 从右往左数 第一位 1 的位置,我们用原数 减去 lowbit 运算 所得到的数据,依次循环,直到0,跳出循环。

小白一个,欢迎小伙伴们一起探讨问题!

小记:原题链接:二进制中1的个数

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值