leetcode

    xiaoxiao2021-03-25  118

    题意:

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

    分析:

    本来的思路是处理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; } }

    转载请注明原文地址: https://ju.6miu.com/read-5356.html

    最新回复(0)