提交 83053c5e 编写于 作者: GreyZeng's avatar GreyZeng

update code

上级 b1899ea1
package git.snippet.bit; package git.snippet.bit;
// TODO
// 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量)。 // 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量)。
// 示例 1:
// 输入:00000000000000000000000000001011
// 输出:3
// 解释:输入的二进制串 00000000000000000000000000001011中,共有三位为 '1'。
// 示例 2:
// 输入:00000000000000000000000010000000
// 输出:1
// 解释:输入的二进制串 00000000000000000000000010000000中,共有一位为 '1'。
// 示例 3:
// 输入:11111111111111111111111111111101
// 输出:31
// 解释:输入的二进制串 11111111111111111111111111111101 中,共有 31 位为 '1'。
// 提示: // 提示:
// 输入必须是长度为 32 的 二进制串 。 // 输入必须是长度为 32 的 二进制串 。
// 进阶: // 进阶:
...@@ -22,7 +10,7 @@ package git.snippet.bit; ...@@ -22,7 +10,7 @@ package git.snippet.bit;
public class LeetCode_0191_NumberOf1Bits { public class LeetCode_0191_NumberOf1Bits {
// TODO // TODO
// 最优解 // 最优解
public int hammingWeight(int n) { public static int hammingWeight(int n) {
n = (n & 0x55555555) + ((n >>> 1) & 0x55555555); n = (n & 0x55555555) + ((n >>> 1) & 0x55555555);
n = (n & 0x33333333) + ((n >>> 2) & 0x33333333); n = (n & 0x33333333) + ((n >>> 2) & 0x33333333);
n = (n & 0x0f0f0f0f) + ((n >>> 4) & 0x0f0f0f0f); n = (n & 0x0f0f0f0f) + ((n >>> 4) & 0x0f0f0f0f);
...@@ -34,15 +22,16 @@ public class LeetCode_0191_NumberOf1Bits { ...@@ -34,15 +22,16 @@ public class LeetCode_0191_NumberOf1Bits {
// 常规解法 // 常规解法
// 一个数的二进制有多少个1 // 一个数的二进制有多少个1
// 最右侧的1 (N&-N) // 最右侧的1 (N&-N)
public int hammingWeight2(int n) { public static int hammingWeight2(int n) {
int num = 0; int ans = 0;
while (n != 0) { while (n != 0) {
int mostRightOne = (n) & ((~n) + 1); int mostRightOne = n & (-n);
if ((mostRightOne & n) != 0) { if ((mostRightOne & n) != 0) {
num++; ans++;
} }
n ^= mostRightOne; n ^= mostRightOne;
} }
return num; return ans;
} }
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册