leetcode_middle_80_201. Bitwise AND of Numbers Range

题意:

给定一段区间,返回区间内所有数按位与的结果。


分析:

本来的思路是处理31位,用数组,对于每一位,全1是1,有0则0,这样需要双重循环,超时

public class Solution {
    public int rangeBitwiseAnd(int m, int n) {
        int num = 0;
        int t = 1;
        for(int i=0; i<31; i++){
            for(int j=m; j<=n; j++){
                if((j>>i) != ((j>>i)|1)){  //最低位即研究位是0
                    break;
                }
                if(j==n){
                    num += t;
                }
            }
            t = t*2;    
        }
        return num;
    }
}

还是得找规律,规律不是自己找的:找最高位的同1.

public class Solution {
    public int rangeBitwiseAnd(int m, int n) {
        if(m == 0){
            return 0;
        }
        int moveFactor = 1;
        while(m != n){
            m >>= 1;
            n >>= 1;
            moveFactor <<= 1;
        }
        return m * moveFactor;
    }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值