美文网首页
坑爹的>>>与>>

坑爹的>>>与>>

作者: portability | 来源:发表于2018-08-08 13:13 被阅读0次

    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;
    

    相关文章

      网友评论

          本文标题:坑爹的>>>与>>

          本文链接:https://www.haomeiwen.com/subject/wfitbftx.html