106.Counting Bits
2016-04-05 10:00
211 查看
Given a non negative integer number num. For every numbers i in the range 0 ≤ i ≤ num calculate the number of 1's in their binary representation and
return them as an array.
Example:
For
给定一个整数num,计算小于等于num的每个自然数中包含的1的个数。
思路1:依次计算每个自然数中1的个数即可。
给定一个整数num,计算小于等于num的每个自然数中包含的1的个数。
思路2:对于自然数i来说,如果i%2==0,说明i是在i/2的基础上左移了一位,那么i和i/2中1的个数是相同的;如果i%2==1,那就说明i是在i/2的基础上左移一位之后再加1,则1的个数加1.
return them as an array.
Example:
For
num = 5you should return
[0,1,1,2,1,2].
给定一个整数num,计算小于等于num的每个自然数中包含的1的个数。
思路1:依次计算每个自然数中1的个数即可。
给定一个整数num,计算小于等于num的每个自然数中包含的1的个数。
public int[] countBits(int num) { int[] result = new int[num+1]; for(int i = 0;i<=num;i++){ result[i] = count1Num(i); } return result; } /*统计某个整数的二进制位中包含1的个数*/ public int count1Num(int n){ int count = 0; while(n!=0){ n = n & (n-1); count++; } return count; }
思路2:对于自然数i来说,如果i%2==0,说明i是在i/2的基础上左移了一位,那么i和i/2中1的个数是相同的;如果i%2==1,那就说明i是在i/2的基础上左移一位之后再加1,则1的个数加1.
public int[] countBits(int num) { int[] result = new int[num+1]; result[0] = 0; for(int i = 1;i<=num;i++){ if(i%2==0){/*如果i%2==0,说明i是在i/2的基础上左移了一位*/ result[i]=result[i/2]; }else{/*i%2==1,那就说明i是在i/2的基础上左移一位之后再加1,则1的个数加1*/ result[i]=result[i/2]+1; } } return result; }
相关文章推荐
- jquery.fn.extend与jquery.extend
- Spring整合websocket整合应用示例(下)
- do...while(0)的妙用
- MySQL 性能优化技巧(一)
- css布局上下左右居中大全(一)
- adb shell命令--命令创建模拟器并启动,命令
- MySQL 性能优化技巧(一)
- 请问网页的在线聊天怎么实现
- sql字符串
- mysql查看连接数和状态,设置连接数和超时时间
- 图像处理与机器视觉网络资源
- Spring-JDBC
- 【php中的curl】php中curl的详细解说
- struts2过滤器和拦截器的区别分析
- find 命令详解
- 图片轮播效果的实现
- android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
- 同桌的你观后感
- myeclipse2014新建maven项目
- 自动化测试学习