C++程序 找出恰好有两个位设置的第N个自然数
给出一个整数 N ,任务是找到具有恰好两个位设置的第N个自然数。
举例:
输入: N = 4
输出: 9
解释:
恰好有两个位设置的数字: 3,5,6,9,10,12, ……
在这个数字中的第四个数字是9。
输入: N = 15
输出: 48
Naive Approach:
- 将循环运行在所有自然数上,并针对每个数字检查其是否具有两个位设置,这可以通过计算数字中的设置位来实现。
- 打印具有两个设置位的Nth数字。
Efficient Approach:
- 通过找到N所属的分区(分区“i”有“i”个数字)来找到最左边的设置位。
- 为了找到另一个设置位,我们需要首先找到N与前一分区的最后一个数字的距离。根据它们的差异,设置相应的位。
- 注意: 要在数字中设置第i位(i=0,1,2…):
- 下面是上述方法的实现:
- 输出:
时间复杂度: 数字的分区
辅助空间: O(1),因为它使用常数变量