191 Number of 1 Bits

最近想刷一下LeetCode练习一下数据结构算法之类的,先从水题开始吧

题目是这样的

Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also known as the Hamming weight).

For example, the 32-bit integer ’11' has binary representation 00000000000000000000000000001011, so the function should return 3.

大概就是32位整形数计算其中1的个数也就是汉明码重,因为最近正在复习C方面的基础知识,看了一本 C和指针 在操作符那一章里面有关于位运算的讲解,其中就是拿这个题目来讲解的,经典果然是经典啊!由此也可以看出,一些大公司的笔试面试题也喜欢从这些经典的书籍里面找原题或者思路

下面就给出Solution:

复制代码
 1 class Solution {
 2 public:
 3     int hammingWeight(uint32_t n) {
 4         int ones=0;
 5         for(;n!=0;n>>=1){
 6             if((n&1)!=0){
 7                 ones++;
 8             }
 9         }
10         return ones;
11     }
12 };
复制代码

简单来说是一个循环,循环判断当前的数字中是否还有1

值得说明的是(1)n&1 判断最低位 如果是0 n>>=1 如果是1 ones加一表示1的位数加一

                  (2)n>>=1 这是一个右移操作,我们来回顾一下移位操作

首先是 左移操作

                    左移操作向左移出n位后尾部空缺位用0补足

其次是 右移操作 

                    右移操作又分为逻辑右移和算术右移两者是有区别的:逻辑右移与左移操作类似,只是向右移出n位后左边的空缺位由0补足;算术右移的话右移n位后高位的空缺位需要用符号位补足,如果是负数就补足1如果是正数就补足0

而到底是什么右移方式是由你的编译器来决定的

当然这道题还有一点小变动:

复制代码
 1 class Solution {
 2 public:
 3     int hammingWeight(uint32_t n) {
 4         int ones=0;
 5         for(;n!=0;n>>=1){
 6             if((n%2)!=0){
 7                 ones++;
 8             }
 9         }
10         return ones;
11     }
12 };
复制代码

    只是将条件判断改成了(n%2)!=0 效果是相同的都是判断当前为是否为1

 

  顺便吐槽下,java运行有这么慢?我不信

posted @   小羊同学  阅读(236)  评论(0编辑  收藏  举报
编辑推荐:
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
阅读排行:
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· 一个基于 .NET 开源免费的异地组网和内网穿透工具
· 《HelloGitHub》第 108 期
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单
点击右上角即可分享
微信分享提示