写在前面
今天的这道题,《位1的个数》,是一个关于进制的题目。
要解出这道题,你需要具备对二进制的基本理解,并且能获取到每一位的二进制的数值。
下面就一起来看一下如何解答吧。
题目解读
从题目的标题来看,就大概知道要统计1出现的个数。
再从题目的描述来看,就知道是统计二进制数字的1出现的个数。
那么问题来了,要统计1出现的个数。
就必须拿到二进制每一位的值才行,这样才能进行有效的比对。
那么如何拿到每一位的值呢?
当然如果是十进制的话,可以使用取余10的方式来提取每一位的值。
但是二进制的肯定是不能取余10,那就取余2吧。
这里就要使用位运算了,通过这种方式拿到每一位的值后。
就可以进行判断统计了。
接下来就看一下代码实现吧。
代码实现
代码执行如下,大家可以自行参考一下。
public class Solution { // you need to treat n as an unsigned value public int hammingWeight(int n) { int total = 0; for (int i = 0; i < 32; i++) { if ((n & (1 << i)) != 0) { total++; } } return total; } }
代码执行结果
本次代码执行的一般,内存消耗太严重,还是要考虑一下内存问题。
其他思路
还有一种更随便的方式,那就是直接使用Java提供的内置方法bitCount方法。代码如下:
public class Solution { // you need to treat n as an unsigned value public int hammingWeight(int n) { return Integer.bitCount(n); } }
执行结果:
竟然比上面的那种还要快,气不气!
总结
今天的总结就是搞清二进制,并且能熟练的提取二进制每一位的值即可解出此题。