算法--微软面试:整数的二进制表示中1的个数(Java实现)
2017-07-01 14:06
597 查看
Q题目
整数的二进制表示中1的个数输入一个整数,求该整数的二进制表达中有多少个1。 例如,输入10,由于其二进制表示为1010,有两个1,因此输出2。
这是一道很基本的考查位运算的面试题。
Answer解法
两种方式:1.先将整数num转换为二进制后,在遍历 2.直接使用位运算
这道题的目的本就是考察位运算,所以建议采用第二种解法。
第二种算法中注意点:区别 右移>>和 无符号右移>>>
就该题本身而言,没有什么难度,这次就不做逻辑分析了。
代码如下
public class Test { public static void main(String[] args) { //测试 System.out.println("方法一:"+getCountOne(1801)); System.out.println("方法一:"+getCountOne(-1801)); System.out.println("******************************"); System.out.println("方法二:"+getCountOne2(1801)); System.out.println("方法二:"+getCountOne2(-1801)); } //方法一:进制转换后,for循环 public static int getCountOne(int num){ //1.转换为二进制 String binary=Integer.toBinaryString(num); System.out.println(num+" 转化为二进制:"+binary); int count=0;//计数器 for(int i=0;i<binary.length();i++){ char x=binary.charAt(i); if(x=='1'){ count++; } } return count; } //方法二:位运算 public static int getCountOne2(int num){ int count=0; while(num!=0) { if((num&1)==1) { count++; } //注意:必须使用无符号位右移(>>>)--区别于:右移(>>),采用右移时,负数会陷入死循环(-1>>-1,结果为-1) num = num>>>1; } return count; } }
运算结果
1801 转化为二进制:11100001001 方法一:5 -1801 转化为二进制:11111111111111111111100011110111 方法一:28 ****************************** 方法二:5 方法二:28
相关文章推荐
- 【LeetCode-面试算法经典-Java实现】【029-Divide Two Integers(两个整数相除)】
- 【LeetCode-面试算法经典-Java实现】【008-String to Integer (atoi) (字符串转成整数)】
- 【LeetCode-面试算法经典-Java实现】【067-Add Binary(二进制加法)】
- 微软面试100题之27题:整数的二进制表示中1 的个数
- 【LeetCode-面试算法经典-Java实现】【002-Add Two Numbers (单链表表示的两个数相加)】
- 整数的二进制表示中1的个数 【微软面试100题 第二十八题】
- 【LeetCode-面试算法经典-Java实现】【013-Roman to Integer (罗马数字转成整数)】
- 一个整数二进制表示中1的个数 java实现
- 【LeetCode-面试算法经典-Java实现】【002-Add Two Numbers (单链表表示的两个数相加)】
- 微软算法100题28 整数的二进制表示中1 的个数
- 微软面试之22 一个整数的二进制中表示中的1的个数
- 【LeetCode-面试算法经典-Java实现】【067-Add Binary(二进制加法)】
- Java算法总结:输入一个整数,求该整数的二进制表示中有多少个1
- 【LeetCode-面试算法经典-Java实现】【007-Reverse Integer(翻转整数)】
- 整数的二进制表示中1的个数 【微软面试100题 第二十八题】
- 【LeetCode-面试算法经典-Java实现】【008-String to Integer (atoi) (字符串转成整数)】
- 微软面试100题之20题:输入一个表示整数的字符串,把该字符串转换成整数并输出
- 算法习题28:整数的二进制表示中1的个数
- 笔试算法题(14):整数二进制表示中的1 & 判定栈的push和pop序列是否对应
- 24. 微软面试题:整数的二进制表示中1的个数