MENU

LeetCode191. 位 1 的个数

July 9, 2018 • Read: 3127 • LeetCode阅读设置

image

思路:

  1. 对一个整数 n,比如 10,它的二进制是 1010
  2. 将 10 减一变为 9,9 的二进制是 1001
  3. 比较 10 和 9 的二进制数,对 10 减一操作就等于将 10 的二进制的最低位上的 1 以及后面的位取反,前面的数不变。

总结:

把一个整数减去 1,再和原整数做与运算,会把该整数最右边 1 一个 1 变成 0。那么一个整数的二进制表示中有多少个 1,就可以进行多少次这样的操作。从而可以减少比较的次数

  • public class Solution {
  • public int hammingWeight(int n) {
  • int count = 0;
  • while(n != 0){
  • n = n & (n-1);
  • count++;
  • }
  • return count;
  • }
  • }
Last Modified: May 12, 2021
Archives Tip
QR Code for this page
Tipping QR Code