leetcode 630. 课程表 III
发布人:shili8
发布时间:2025-01-10 19:45
阅读次数:0
**课程表 III**
给定一个非负整数 `n`,返回所有小于或等于 `n` 的非负整数的二进制表示中1 的个数。
**示例1:**
输入:`n =10`
输出:`2`
解释:二进制表示为 `1010`,有 `2` 个 `1`。
**示例2:**
输入:`n =11`
输出:`3`
解释:二进制表示为 `1011`,有 `3` 个 `1`。
**示例3:**
输入:`n =12`
输出:`4`
解释:二进制表示为 `1100`,有 `4` 个 `1`。
**示例4:**
输入:`n =13`
输出:`5`
解释:二进制表示为 `1101`,有 `5` 个 `1`。
**示例5:**
输入:`n =14`
输出:`6`
解释:二进制表示为 `1110`,有 `6` 个 `1`。
**解决方案**
我们可以使用位运算来解决这个问题。具体来说,我们可以使用 `countLeadingZeroBits()` 和 `countTrailingZeroBits()` 函数来计算二进制表示中1 的个数。
cppclass Solution { public: int countBits(int n) { // 使用 countLeadingZeroBits() 和 countTrailingZeroBits() 函数计算二进制表示中1 的个数 return __builtin_popcount(n); } };
**注释**
* `__builtin_popcount()` 是一个内置函数,用于计算二进制表示中1 的个数。
* `countLeadingZeroBits()` 和 `countTrailingZeroBits()` 函数可以用于计算二进制表示中前导零和尾随零的数量。
**测试用例**
cppint main() { Solution solution; // 测试用例1 int n =10; int result = solution.countBits(n); cout << "Test case1: Expected output is2, Actual output is " << result << endl; // 测试用例2 n =11; result = solution.countBits(n); cout << "Test case2: Expected output is3, Actual output is " << result << endl; // 测试用例3 n =12; result = solution.countBits(n); cout << "Test case3: Expected output is4, Actual output is " << result << endl; return0; }
**总结**
本题要求计算小于或等于 `n` 的非负整数的二进制表示中1 的个数。我们可以使用位运算来解决这个问题,具体来说,我们可以使用 `countLeadingZeroBits()` 和 `countTrailingZeroBits()` 函数来计算二进制表示中1 的个数。测试用例和注释均已提供,以帮助理解和实现该解决方案。