二进制中有多少个1-LintCode
2017-09-25 21:58
281 查看
计算在一个 32 位的整数的二进制表示中有多少个 1.
Example:
给定 32 (100000),返回 1
给定 5 (101),返回 2
给定 1023 (111111111),返回 9
Challenge:
If the integer is n bits with m 1 bits. Can you do it in O(m) time?
如果num是负数,则将其与-1取异或,得到正数m,最终结果为32-countOnes(m)。
把一个整数减去1,再和原整数做运算,会把改整数最右边的1变为0。一个整数的二进制表示中由多少个1,就可以进行多少次这样的操作。
Example:
给定 32 (100000),返回 1
给定 5 (101),返回 2
给定 1023 (111111111),返回 9
Challenge:
If the integer is n bits with m 1 bits. Can you do it in O(m) time?
如果num是负数,则将其与-1取异或,得到正数m,最终结果为32-countOnes(m)。
#ifndef C365_H #define C365_H #include<iostream> #include<Windows.h> using namespace std; class Solution { public: /* * @param num: An integer * @return: An integer */ int countOnes(int num) { // write your code here if (num < 0) return 32 - countOnesRecur(num); else return countOnesRecur(num); } int countOnesRecur(int num) { int count = 0; if (num < 0) { num = -1 ^ num; } if (num == 1) return 1; if (num == 0) return 0; if (num % 2 == 0) return countOnes(num >> 1); else return countOnes(num >> 1) + 1; } }; #endif
把一个整数减去1,再和原整数做运算,会把改整数最右边的1变为0。一个整数的二进制表示中由多少个1,就可以进行多少次这样的操作。
class Solution { public: /** * @param num: an integer * @return: an integer, the number of ones in num */ int countOnes(int num) { // write your code here int count=0; while(num){ count++; num&=(num-1); } return count; } };
相关文章推荐
- 二进制中有多少个1-lintcode
- lintcode--二进制有多少个1
- LintCode-二进制中有多少个1
- LintCode 二进制中有多少个1
- 【LintCode 简单】365. 二进制中有多少个1
- LintCode-剑指Offer-(365)二进制中有多少个1
- LintCode之365 二进制中有多少个1
- lintcode 容易题:Count 1 in Binary 二进制中有多少个1
- 23:一个整数的二进制表示中有多少个1
- 题目:二进制中有多少个1
- LintCode-365.二进制中有多少个1
- 整数的二进制表示中有多少个1
- 输入一个整数,求该整数的二进制表达中有多少个1。例如输入10,由于其二进制表示为1010,有两个1,因此输出2。
- 二进制中有多少个1
- 二进制求和(LintCode)
- 计算将一个十进制整数转换成二进制含多少个1
- 【微软100题】输入一个整数,求该整数的二进制表达中有多少个1
- 输出一个整数的每一位。两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
- LintCode 180-二进制表示
- 求一个数的二进制表示中,有多少个1的问题