《剑指offer》 二进制中1的个数
本题来自《剑指offer》 二进制中1的个数
题目:
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
思路:
两种思路:
第一种:对n进行左移,检测最后一位是否为1,但考虑负数,一直左移会陷入到死循环中。
第二种:对n的每一位进行检测,采用滑标flag,左移,int会是32位,所以会最多移动32次。
C++ code1:(第二种思路)
class Solution {
public:
int NumberOf1(int n) { //最多可以移动32次,
int count=;
unsigned int flag = ; //无符号的整形数据【0,655**】
while(flag){ //flag左移直到,为0时候便结束
if (flag&n){ //和n相与,如果为1就累计
count += ;
}
flag = flag << ; //flag左移[0000-31-00001]
}
return count;
}
};
C++ Code2:
class Solution {
public:
int NumberOf1(int n) { //最多可以移动32次,
int count=;
while(n){ //flag左移直到,为0时候便结束
count ++;
n = (n-1)&n;
}
return count;
}
};
总结:
检测是否为1,采用与1相与的操作。考虑正数和负数和0做测试集。
《剑指offer》 二进制中1的个数的更多相关文章
- leetcode 338. Counting Bits,剑指offer二进制中1的个数
leetcode是求当前所有数的二进制中1的个数,剑指offer上是求某一个数二进制中1的个数 https://www.cnblogs.com/grandyang/p/5294255.html 第三种 ...
- 剑指Offer 二进制中1的个数
题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 思路: 如果一个整数不为0,那么这个整数至少有一位是1.如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原 ...
- 剑指Offer——二进制中1的个数
题目描述: 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 分析: 加入一个数的二进制位是XXX...XXX1000...000,那么这个数减去1,就会变成XXX...XXX0111 ...
- 剑指offer——二进制中1的个数(c++)
题目描述实现一个函数,输入一个整数,输出该数二进制表示中1的个数.例如,把9表示成二进制是1001,则输出为2 常规解法首先把n和1做位运算,判断n的最低位是不是1,然后把1左移一位得到2,再把n和2 ...
- 剑指Offer08 二进制中1的个数
/************************************************************************* > File Name: 08_NumOf1 ...
- 剑指offer中二进制中1的个数
容易想到的是将n一位一位的和1进行比较,产生如下代码 但是这样的话会出下面的问题 那么就是原数据不动,将1依次移动进行比较有如下的代码 一种更简单的方法是: 这样做的思路是 总而言之
- 剑指offer--13.二进制中1的个数
就是猜测试数据没有负数,哈哈 ----------------------------------------------------------------- 时间限制:1秒 空间限制:32768K ...
- 剑指Offer-11.二进制中1的个数(C++/Java)
题目: 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 分析: 将数字和1先做与运算,然后将1右移一位,现在是判断数字的第二位是不是1,这样循环的做下去即可.也可以转换成字符串再统计 ...
- 9-剑指offer: 二进制中1的个数
题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 代码 class Solution { public: int NumberOf1(int n) { if(n==0) re ...
- 剑指offer15 二进制中1的个数
题目:请实现一个函数,输入一个整数,输出该数二进制表示中1的个数.例如,把9表示成二进制是1001,有2位是1.因此,如果输入9则函数输出2. int Number(int n) { ; while ...
随机推荐
- python 的基础 学习 第三天 编码的初始
1 编码的初始 计算机在存储数据和传输数据的时候,都是0101的二进制. ASCII(American Standard Code for Information Interchange,美国标准信 ...
- windows server 2012 配置多用户ftp服务器配置注意点
1.ftp根目录配置“FTP授权规则”为: 2.配置“FTP用户隔离”为: 3.配置“FTP目录浏览”为: 4.ftp虚拟目录“FTP授权规则”配置为:
- 【译】第三篇 SQL Server安全主体和安全对象
本篇文章是SQL Server安全系列的第三篇,详细内容请参考原文. 一般来说,你通过给主体分配对象的权限来实现SQL Server上的用户与对象的安全.在这一系列,你会学习在SQL Server实例 ...
- css3动画transition animation
CSS动画简介 transition animation transition过渡:css3通过transitions属性引入时间概念,通过开始.结束状态自动计算中间状态,实现状态改变的过渡效果 ...
- Django学习手册 - ORM 单表数据获取
Django 单表数据的获取: 先建立数据表格 from django.db import models # Create your models here. class userinfo(model ...
- pythonの连接MySQL数据库
1.要确保开发环境中安装了pymsql,如果没有安装那么在控制台输入: pip3 install pymysql 安装完成后,打开编辑器: #!/usr/bin/env python import p ...
- sqoop导数据
1.添加oracle jdbc驱动 https://blog.csdn.net/eason_oracle/article/details/76836758 2.
- 阿里云ECS CentOS 7 安装图形化桌面
CentOS 7 系统下,本文以 MATE 桌面环境安装进行安装配置说明: 1 . 安装 X Window System. yum groups install "X Window Syst ...
- Elasticsearch 5.4.3实战--Java API调用:搜索
ES有多种查询方式,我自己的业务是需要对多个字段进行查询,具体实现类代码如下. package com.cs99lzzs.elasticsearch.service.imp; import java. ...
- 设计模式C++学习笔记之十三(Decorator装饰模式)
装饰模式,动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator模式相比生成子类更为灵活. 13.1.解释 main(),老爸 ISchoolReport,成绩单接口 CFourt ...