LeetCode算法题-Number of 1 Bits(Java实现)
这是悦乐书的第186次更新,第188篇原创
01 看题和准备
今天介绍的是LeetCode算法题中Easy级别的第45题(顺位题号是191)。编写一个带无符号整数的函数,并返回它所具有的“1”位数。例如:
输入:11
输出:3
说明:整数11具有二进制表示00000000000000000000000000001011
输入:128
输出:1
说明:整数128具有二进制表示00000000000000000000000010000000
本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。
02 第一种解法
这道题与昨天的题类似,都是和位操作有关。此题是统计二进制位“1”的出现次数,对此可以使用与(&)运算,对于n还是依次从左往右移动。
public int hammingWeight(int n) {
int count = 0;
for(int i=0; i<32; i++){
if ((n&1) == 1) {
count++;
}
n = n >> 1;
}
return count;
}
03 第二种解法
对于上面的解法,还可以再简化下,省掉那个判断,因为和1做与运算,如果最后一位是1,整个运算结果就是1,就相当于是自增加1。
public int hammingWeight2(int n) {
int count = 0;
for (int i=0; i<32; i++) {
count += n&1;
n = n >> 1;
}
return count;
}
04 第三种解法
上面的两种解法都是拿n和1做与运算,其实还可以换种思路,使用n和n-1做位运算。此时,分两种情况:当n的二进制最后一位是1的时候,n-1的二进制位除了最后一位和n不一样,其他位都是一样的,此时n&(n-1)得到的结果是n-1,此时消除的是n的二进制最后一位;当n的二进制最后一位是0的时候,n-1的二进制位最后一位是1,n从最后一位1往左开始和n-1的对应位是一样的,此时n&(n-1)得到的是n最后一位1出现位置往左之前的位,此时消除的n的二进制位中最后出现的1。每次都会消除一位1,直到n最后变成0。
例如:
10 1010
9 1001
与:1000
14 1110
13 1101
与:1100
public int hammingWeight3(int n) {
int count = 0;
while (n != 0) {
count++;
n = n & (n - 1);
}
return count;
}
05 第四种解法
将n变成二进制字符串,然后依次查找字符串中的1,并记数。其中,整数1的Unicode十进制值是49,所以使用charAt方法时,是和49判断。
public int hammingWeight4(int n) {
int count =0;
String binary = Integer.toBinaryString(n);
for (int i =0; i<binary.length(); i++) {
if (binary.charAt(i) == 49) {
count++;
}
}
return count;
}
06 第五种解法
直接使用包装类Integer自带的方法bitCount即可。
public int hammingWeight5(int n) {
return Integer.bitCount(n);
}
07 小结
算法专题目前已连续日更超过一个月,算法题文章45+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。
以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!
LeetCode算法题-Number of 1 Bits(Java实现)的更多相关文章
- LeetCode算法题-Number of Boomerangs(Java实现)
这是悦乐书的第231次更新,第244篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第98题(顺位题号是447).给定平面中的n个点都是成对不同的,"回旋镖&qu ...
- LeetCode算法题-Number of Lines To Write String(Java实现)
这是悦乐书的第319次更新,第340篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第188题(顺位题号是806).我们要将给定字符串S的字母从左到右写成行.每行最大宽度为 ...
- LeetCode算法题-Number Complement(Java实现-五种解法)
这是悦乐书的第240次更新,第253篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第107题(顺位题号是476).给定正整数,输出其补码数.补充策略是翻转其二进制表示的位 ...
- LeetCode算法题-Number of Segments in a String(Java实现)
这是悦乐书的第226次更新,第239篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第93题(顺位题号是434).计算字符串中的段数,其中段定义为非空格字符的连续序列.请注 ...
- LeetCode算法题-Subdomain Visit Count(Java实现)
这是悦乐书的第320次更新,第341篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第189题(顺位题号是811).像"discuss.leetcode.com& ...
- LeetCode算法题-Letter Case Permutation(Java实现)
这是悦乐书的第315次更新,第336篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第184题(顺位题号是784).给定一个字符串S,将每个字母单独转换为小写或大写以创建另 ...
- LeetCode算法题-Jewels and Stones(Java实现)
这是悦乐书的第313次更新,第334篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第182题(顺位题号是771).字符串J代表珠宝,S代表你拥有的石头.S中的每个字符都是 ...
- LeetCode算法题-Shortest Completing Word(Java实现)
这是悦乐书的第309次更新,第330篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第178题(顺位题号是748).从给定的字典单词中查找最小长度单词,其中包含字符串lic ...
- LeetCode算法题-Self Dividing Numbers(Java实现)
这是悦乐书的第305次更新,第324篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第173题(顺位题号是728).自分割数是一个可被其包含的每个数字整除的数字.例如,12 ...
随机推荐
- Spring Cloud Stream消费失败后的处理策略(三):使用DLQ队列(RabbitMQ)
应用场景 前两天我们已经介绍了两种Spring Cloud Stream对消息失败的处理策略: 自动重试:对于一些因环境原因(如:网络抖动等不稳定因素)引发的问题可以起到比较好的作用,提高消息处理的成 ...
- 【转载】阿里云轻量应用型服务器和ECS服务器比较
在采购阿里云服务器的时候,我们会发现阿里云服务器分好多种,如GPU服务器.ECS服务器.轻量应用型服务器等.ECS服务器和轻量应用型服务器很多人无法搞明白其中的差别,个人的观点是轻量应用型服务器适合入 ...
- 有关于MVC SignalR的问题
刚拜读 @Learning hard 的 [Asp.net 开发系列之SignalR篇]专题一:Asp.net SignalR快速入门 跟着博文一步步操作,这是新人的学习方式 然而笔者的开发环境和 @ ...
- SpringBoot 配置 Servlet、Filter、Listener
SpringBoot 配置 Servlet.Filter.Listener 在SpringBoot应用中,嵌入式的 Servlet 3.0+ 容器不会直接使用 ServletContainerInit ...
- JS基础(一)dom小实例
DOM的新增示例 <script language="JavaScript"> window.onload = function(){ //createDocument ...
- linux 中rc是什么意思
在Linux中,最为常用的缩略语也许是"rc" 它是"runcomm"的缩写――即名词"run command"(运行命令)的简写.rc&q ...
- Nginx之OCSP stapling配置
摘要: 正确地配置OCSP stapling, 可以提高HTTPS性能. 什么是OCSP stapling? OCSP的全称是Online Certificate Status Protocol,即在 ...
- Promise是Monad吗?
译者按: 近年来,函数式语言的特性都被其它语言学过去了. 原文: Functional Computational Thinking — What is a monad? 译者: Fundebug 为 ...
- 在html中使用特殊字体
目的:一首诗,要求从右往左读,垂直排列,类似古文 效果图: html内容: <!doctype html><html lang="en"><head& ...
- jQuery效果之雪花飘落
实现思路 1.在一定的频率下在页面中生成一定数目的雪花从上往下飘落: 2.在指定的时间内飘落后移除页面: 3.可设置雪花的大小,在一定范围内随机雪花大小: 4.什么时间后清除生成雪花,停止函数. js ...