0
点赞
收藏
分享

微信扫一扫

【Leetcode-每日一题】 二进制表示中质数个计算置位

南陵王梁枫 2022-04-05 阅读 48
leetcode

二进制表示中质数个计算置位
难度:简单
在这里插入图片描述
在这里插入图片描述
根据题意,遍历[left,right]每个数,求出当前数的二进制有n个1,再判断n是否为质数即可。
代码如下:

	public int countPrimeSetBits(int left, int right) {
        int res = 0;
        for (int i = left; i <= right; i++) {
            int cnt = 0;
            int tmp = i;
            while(tmp>0){
                if (tmp % 2 == 1){
                    cnt++;
                }
                tmp /= 2;
            }
            if(helper(cnt)){
                res++;
            }
        }
        return res;
    }

    public boolean helper(int x){
        if (x == 2 || x == 3 || x == 5 || x == 7 || x == 11 || x == 13 || x == 17 || x== 19){
            return true;
        }
        return false;
    }

执行结果:成功
在这里插入图片描述
效率不高,根据昨天学习到lowbit ( i & -i 可以求出该数二进制最后一位1所表示的十进制 ) ,可以优化如下:

//	  while(tmp>0){
//        if (tmp % 2 == 1){
//            cnt++;
//        }
//        tmp /= 2;
//    }
	while(tmp>0){
        tmp -= tmp & -tmp;
        cnt++;
    }
举报

相关推荐

0 条评论