坑爹的>>>与>>

2018-08-08  本文已影响0人  portability

leetcode 191
题目背景:
大体意思就是一个int数字转成2进制后有多少个1。


思路一:

直接转成2进制数组,sum(int[])来获取所有的1;

思路二:


我联想到10进制转2进制,所有的1都出现在余数reminder中,所以只要有余数就在result中+1
代码如下:

public class Solution {
    // you need to treat n as an unsigned value
    public int hammingWeight(int n) {
        int res = 0;
        while(n != 0){
            if((n & 1) == 1){
                res++;
            }
            n = n >>> 1;
        }
        return res;
    }
}

n&1 == 1 判断当前n是否是奇数,是奇数,则res++。submit的时候一直报错,timing out后面感觉应该是>>>>>的区别。本题应该采用>>>,因为如果采用>>是有符号右移操作,负数会导致n一直非0,进入死循环。

思路三


利用一个mask来与n进行&运算,最后通过mask的迭代左移进行计数。
代码如下:

        int mask = 1;
        int count = 0;
        for(int i=0; i < 32; i++){
            if((n & mask) != 0) ++count;
            mask = mask << 1;
        }
        return count;
上一篇下一篇

猜你喜欢

热点阅读