本文主要是介绍剑指offer--- 二进制中一的个数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
解题思路:
该问题如果使用的是,第一反应中想到的向右移,然后判断target是否为0的方法,会因为负数造成oom。
因此,使用n & (n - 1) 的方式;将一个数减去1,再与原来的数做与运算会将原来的数的最后一位变成0,因此,有多少个1就可以进行多少次这样的运算。
java
public class Solution {public int NumberOf1(int n) {int count = 0;while (n != 0) {count++;n = n & (n - 1);}return count;}
}
(1)判断一个数是否为2的整数次方;
(2)判断m,n两个数需要经过多少次运算才能变为同样的数;
这篇关于剑指offer--- 二进制中一的个数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!