码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode191-位1的个数(题目有问题)

时间:2018-08-10 23:08:32      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:整数   方法   info   编辑   img   版本   .com   自己   判断   

和1做与运算,结果为1的那一位就是1,不断右移

第一个版本

public static int hammingWeight(int n) {
        int count = 0;
        while(n!=0){
            if((n&1)==1)
                count++;
            n=n>>1;
        }
        return count;
    }

 

超时了?

技术分享图片

 

技术分享图片

 

 自己输几个用例

技术分享图片

技术分享图片

 

技术分享图片

技术分享图片

 

我不懂!题目函数的参数是int,为什么会有这种用例,这不是题目的错误吗。在编辑器里面根本都过不了

技术分享图片

 

技术分享图片

 

 

我把里面的n转化成long也不行

技术分享图片

 

 

我把函数参数改成long也不行???

技术分享图片

 

为什么还会显示Integer?

技术分享图片

明明这个时候还是long

 

 我懂了,应该是java默认输入的参数都是int类型的

 技术分享图片

 

技术分享图片

 

服了,这是什么BUG题目,真强

 

 假如题目是long,那么只要移位即可。使用int毫无意思,java里面没有unsigned int。

后来想到int的最大值是2147483647,那么2147483649是2147483647+1,用int肯定传不进来的,但是题目模范就是int。

没法

2147483647是整数里面最大的,就是0 1111111111111111111111111111111111111111111111111111111111(乱打的1,没数多少)

那么2147483648就是 0 11111111111111111111111111111 + 1 = 1 000000000000000000000000

因为最前面的1位是1,所以右移的话,左边是补1的,不会等0,所以导致了前面的超时!

太恶心了。

这个时候,1 000000000000000000000 是 -0 就是 0

这个不是补码,而是乱来

1 00000000000000000000001 呢 2147483649 要怎么算呢?

或许能用2147483649 - 2147483647 - 1 ?

无论怎么算,都没法找到好的方法。

 

但是有一种方法可以完美解决这种问题。

不是用原数据来移位。

就是改变用来与运算的值。1,10,100,1000,10000 .。。。。。。。。。。。 这样就能不断的从右往左去比较了!

一开始是负数的情况使用的,后来发现无论是整数还是负数都管用!

 

0 11111111111111111111111111111  比如判断第五位 使用 10000 ,只要与运算之后,结果是10000就行了,只关注第五位,其他的不管,就是和

0 0000000000000000000010000 运算

 

public int hammingWeight(int n) {
        int i = 0;
            int test = 1;
            int count = 0;
            while(i<32){

                if((n&test)==test)
                    count++;

                test=test<<1;
                i++;

            }

            return count;
    }

 

技术分享图片

 

说到底,还是题目的int太恶心了,明明是int是无法通过的,为了不让使用long,就用int来误导别人。

LeetCode191-位1的个数(题目有问题)

标签:整数   方法   info   编辑   img   版本   .com   自己   判断   

原文地址:https://www.cnblogs.com/weizhibin1996/p/9457555.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!