MENU

LeetCode191. 位 1 的个数

July 9, 2018 • Read: 3128 • 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
Leave a Comment

  • OωO
  • |´・ω・)ノ
  • ヾ(≧∇≦*)ゝ
  • (☆ω☆)
  • (╯‵□′)╯︵┴─┴
  •  ̄﹃ ̄
  • (/ω\)
  • ∠( ᐛ 」∠)_
  • (๑•̀ㅁ•́ฅ)
  • →_→
  • ୧(๑•̀⌄•́๑)૭
  • ٩(ˊᗜˋ*)و
  • (ノ°ο°)ノ
  • (´இ皿இ`)
  • ⌇●﹏●⌇
  • (ฅ´ω`ฅ)
  • (╯°A°)╯︵○○○
  • φ( ̄∇ ̄o)
  • ヾ(´・ ・`。)ノ"
  • ( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
  • (ó﹏ò。)
  • Σ(っ °Д °;)っ
  • ( ,,´・ω・)ノ"(´っω・`。)
  • ╮(╯▽╰)╭
  • o(*////▽////*)q
  • >﹏<
  • ( ๑´•ω•) "(ㆆᴗㆆ)
  • (。•ˇ‸ˇ•。)
  • 泡泡
  • 阿鲁
  • 颜文字