剑指offer-11-二进制1的个数

二进制中1的个数

http://www.nowcoder.com/questionTerminal/8ee967e43c2c4ec193b040ea7fbb10b8

思路

  • 十进制转换为二进制,进制转换:取模倒排法(高中数学),这里是%2,然后原数除以2
  • 位运算,除2可以转换为右移1,n&1二进制最低位的数字
  • lowbit函数,在树状数组结构中有一个函数名为lowbit函数 i&(i-1),,将最低位的1变成0;,比如 110变成100,由6变成4,4是小于6的最大的2的幂
    显然: 思路3>2>1
    再看看,Integer类的方法,lowesrOneBit()和highestOneBit() 分别是获得最小和最大的2个幂次的分量权重。
    比如6的二进制是110,分解为4+2+0,lowesrOneBit(6)=2,highestOneBit(6)=4;

代码

lowbit函数

public class Solution {
    public int NumberOf1(int n) {
        int cnt=0;
        while(n!=0){
            cnt++;
            n=n&(n-1); //n=n-Integer.lowestOneBit(n);  
        }
        return cnt;
    }
}
剑指offer与数据结构 文章被收录于专栏

本专栏包括剑指offer题目和一些刷题用的数据结构,单调栈,树状数组,差分数组,后面还会更新红黑树等较为复杂的数据结构

全部评论

相关推荐

11-08 17:36
诺瓦科技_HR
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务