当前位置:实例文章 » 其他实例» [文章]leetcode 630. 课程表 III

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 的个数。测试用例和注释均已提供,以帮助理解和实现该解决方案。

其他信息

其他资源

Top