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 519cbfdcc09c9223bc5a10c10dcbc2103f6f7519..137be8609ba1dc711cefc99abc82c4383a55066d 100644 --- a/src/main/java/git/snippet/bit/LeetCode_0191_NumberOf1Bits.java +++ b/src/main/java/git/snippet/bit/LeetCode_0191_NumberOf1Bits.java @@ -8,14 +8,15 @@ package git.snippet.bit; // 如果多次调用这个函数,你将如何优化你的算法? // LeetCode: https://leetcode.com/problems/number-of-1-bits/ public class LeetCode_0191_NumberOf1Bits { + // TODO // 最优解 public static int hammingWeight(int n) { - n = (n & 0x55555555) + ((n >>> 1) & 0x55555555); - n = (n & 0x33333333) + ((n >>> 2) & 0x33333333); - n = (n & 0x0f0f0f0f) + ((n >>> 4) & 0x0f0f0f0f); - n = (n & 0x00ff00ff) + ((n >>> 8) & 0x00ff00ff); - n = (n & 0x0000ffff) + ((n >>> 16) & 0x0000ffff); + n = (n & 0b01010101_01010101_01010101_01010101) + ((n >>> 1) & 0b01010101_01010101_01010101_01010101); + n = (n & 0b00110011_00110011_00110011_00110011) + ((n >>> 2) & 0b00110011_00110011_00110011_00110011); + n = (n & 0b00001111_00001111_00001111_00001111) + ((n >>> 4) & 0b00001111_00001111_00001111_00001111); + n = (n & 0b00000000_11111111_00000000_11111111) + ((n >>> 8) & 0b00000000_11111111_00000000_11111111); + n = (n & 0b00000000_00000000_11111111_11111111) + ((n >>> 16) & 0b00000000_00000000_11111111_11111111); return n; }