From 83053c5eb314b07d2fd8b46ec578fd12e5930a8a Mon Sep 17 00:00:00 2001 From: GreyZeng <410486047@qq.com> Date: Fri, 19 Jan 2024 19:47:47 +0800 Subject: [PATCH] update code --- .../bit/LeetCode_0191_NumberOf1Bits.java | 27 ++++++------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/src/main/java/git/snippet/bit/LeetCode_0191_NumberOf1Bits.java b/src/main/java/git/snippet/bit/LeetCode_0191_NumberOf1Bits.java index 258dc359..519cbfdc 100644 --- a/src/main/java/git/snippet/bit/LeetCode_0191_NumberOf1Bits.java +++ b/src/main/java/git/snippet/bit/LeetCode_0191_NumberOf1Bits.java @@ -1,19 +1,7 @@ package git.snippet.bit; -// TODO + // 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量)。 -// 示例 1: -// 输入:00000000000000000000000000001011 -// 输出:3 -// 解释:输入的二进制串 00000000000000000000000000001011中,共有三位为 '1'。 -// 示例 2: -// 输入:00000000000000000000000010000000 -// 输出:1 -// 解释:输入的二进制串 00000000000000000000000010000000中,共有一位为 '1'。 -// 示例 3: -// 输入:11111111111111111111111111111101 -// 输出:31 -// 解释:输入的二进制串 11111111111111111111111111111101 中,共有 31 位为 '1'。 // 提示: // 输入必须是长度为 32 的 二进制串 。 // 进阶: @@ -22,7 +10,7 @@ package git.snippet.bit; public class LeetCode_0191_NumberOf1Bits { // TODO // 最优解 - public int hammingWeight(int n) { + public static int hammingWeight(int n) { n = (n & 0x55555555) + ((n >>> 1) & 0x55555555); n = (n & 0x33333333) + ((n >>> 2) & 0x33333333); n = (n & 0x0f0f0f0f) + ((n >>> 4) & 0x0f0f0f0f); @@ -34,15 +22,16 @@ public class LeetCode_0191_NumberOf1Bits { // 常规解法 // 一个数的二进制有多少个1 // 最右侧的1 (N&-N) - public int hammingWeight2(int n) { - int num = 0; + public static int hammingWeight2(int n) { + int ans = 0; while (n != 0) { - int mostRightOne = (n) & ((~n) + 1); + int mostRightOne = n & (-n); if ((mostRightOne & n) != 0) { - num++; + ans++; } n ^= mostRightOne; } - return num; + return ans; } + } -- GitLab