• 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运行有这么慢?我不信

  • 相关阅读:
    开发思路总结
    电脑蓝屏代码丢失,Eclipse这个功能帮我找回了代码
    书籍
    向日葵无法在控制端用键盘输入的原因
    js 多submit 不使其执行其他submit form
    js获取url参数值
    C# 正则表达式 去除HTML标签 C#后台
    读取txt文件 循环操作每行数据 添加到数据库
    Ubuntu中安装XAMPP出错的解决方法(转发,备查)
    常用正则表达式
  • 原文地址:https://www.cnblogs.com/xiaoysec/p/4414118.html
Copyright © 2020-2023  润新知