news 2026/8/6 10:56:52

DeepSeek LeetCode 3821. 二进制中恰好K个1的第N小整数 Python3实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DeepSeek LeetCode 3821. 二进制中恰好K个1的第N小整数 Python3实现

看到你给出的函数签名 def nthSmallest(self, n: int, k: int) -> int,这是 LeetCode 3821 的标准接口。我来提供完整的、可直接提交的解法:

解法一:组合计数法(推荐)

```python
class Solution:
def nthSmallest(self, n: int, k: int) -> int:
"""
返回二进制表示中恰好有 k 个 1 的第 n 小的正整数
"""
# 计算组合数 C(a, b)
def comb(a: int, b: int) -> int:
if b < 0 or b > a:
return 0
if b > a - b:
b = a - b
res = 1
for i in range(1, b + 1):
res = res * (a - b + i) // i
return res

# 第 1 步:确定答案的二进制长度
length = k # 最短长度就是 k(全为1)
while True:
# 长度为 length 时,首位必须是1,从剩余 length-1 位中选 k-1 个位置放1
cnt = comb(length - 1, k - 1)
if n > cnt:
n -= cnt
length += 1
else:
break

# 第 2 步:在长度为 length 的数中找第 n 个
ans = 1 << (length - 1) # 最高位固定为1
remaining_ones = k - 1 # 还需要放的1的个数
pos = length - 2 # 从次高位开始(索引从0开始)

while remaining_ones > 0 and pos >= 0:
# 如果当前位置放0,后面 pos 个位置能组成的方案数
cnt = comb(pos, remaining_ones)

if n > cnt:
# 跳过所有当前位置为0的情况,当前位置放1
n -= cnt
ans |= (1 << pos)
remaining_ones -= 1

pos -= 1

return ans
```

解法二:位运算生成法

```python
class Solution:
def nthSmallest(self, n: int, k: int) -> int:
"""
使用位运算生成恰好 k 个 1 的二进制数
"""
# 最小的数:最低的 k 位为 1
num = (1 << k) - 1

# 生成第 n 个数(从第1个开始)
for _ in range(n - 1):
# 找到最右边的非拖尾 1(即最右边的 "01" 模式)
# 例如:011100 -> 100011
smallest = num & -num # 最低位的1
ripple = num + smallest # 将连续的1进位
ones = ((num ^ ripple) >> 2) // smallest # 计算需要补的1的个数
num = ripple | ones

return num
```

解法三:递归法(更直观)

```python
class Solution:
def nthSmallest(self, n: int, k: int) -> int:
"""
递归构造:固定首位,递归处理剩余位
"""
def comb(a: int, b: int) -> int:
if b < 0 or b > a:
return 0
if b > a - b:
b = a - b
res = 1
for i in range(1, b + 1):
res = res * (a - b + i) // i
return res

def build(length: int, k: int, n: int) -> int:
"""在长度为 length 的数中找第 n 个(首位已经固定为1)"""
if length == k: # 所有位都是1
return (1 << length) - 1
if k == 0: # 没有1了
return 0

# 次高位放0,后面 length-1 位中选 k 个
cnt_with_zero = comb(length - 1, k)

if n <= cnt_with_zero:
# 第 n 个在次高位为0的分支中
return build(length - 1, k, n)
else:
# 第 n 个在次高位为1的分支中
return (1 << (length - 1)) + build(length - 1, k - 1, n - cnt_with_zero)

# 确定长度
length = k
while True:
cnt = comb(length - 1, k - 1)
if n > cnt:
n -= cnt
length += 1
else:
break

return build(length, k, n)
```

测试验证

```python
if __name__ == "__main__":
sol = Solution()

# 测试用例
test_cases = [
(1, 2), # 3 (11)
(2, 2), # 5 (101)
(3, 2), # 6 (110)
(4, 2), # 9 (1001)
(5, 2), # 10 (1010)
(1, 1), # 1 (1)
(2, 1), # 2 (10)
(3, 1), # 4 (100)
(1, 3), # 7 (111)
(2, 3), # 11 (1011)
]

for n, k in test_cases:
result = sol.nthSmallest(n, k)
print(f"n={n}, k={k} -> {result} (binary: {bin(result)})")
```

复杂度分析

· 时间复杂度:O(L),其中 L 是答案的二进制长度,对于 32 位整数最多 32 步
· 空间复杂度:O(1)

解法一最优,因为它直接通过组合数学定位,不需要迭代 n 次。当 n 很大时(如 10^9),解法二会超时,而解法一依然高效。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/6 10:56:03

QKeyMapper:Windows平台终极跨设备按键映射解决方案

QKeyMapper&#xff1a;Windows平台终极跨设备按键映射解决方案 【免费下载链接】QKeyMapper [按键映射工具] QKeyMapper&#xff0c;Qt开发Win10&Win11可用&#xff0c;不修改注册表、不需重新启动系统&#xff0c;可立即生效和停止。支持游戏手柄映射到键鼠&#xff0c;手…

作者头像 李华
网站建设 2026/8/6 10:55:51

西班牙智慧灌溉阀控器物联网卡:本土网络低功耗适配

一、西班牙智慧灌溉行业现状与设备联网难题当前西班牙智慧农业与节水农业持续升级&#xff0c;各类温室大棚、露天农田、规模化种植园&#xff0c;均已普及智能化灌溉系统。智慧灌溉阀控器作为核心终端设备&#xff0c;可实现远程阀门启停、定量定时灌溉、设备状态监测、智能节…

作者头像 李华
网站建设 2026/8/6 10:55:43

Unity动态天气系统UniStorm:从体积云渲染到游戏玩法集成

1. 项目概述&#xff1a;为什么我们需要一个顶级的动态天气系统&#xff1f;在游戏和虚拟现实项目中&#xff0c;天空和天气从来不只是背景板。它们是最直接、最宏大的情绪渲染器。想象一下&#xff0c;你正操控角色在一片开阔的平原上探索&#xff0c;头顶是静止不变的蓝天白云…

作者头像 李华
网站建设 2026/8/6 10:55:26

Unity启动画面全解析:从内置配置到自定义加载场景的实战优化

1. 项目概述&#xff1a;为什么Unity启动画面值得深究&#xff1f;做Unity开发这么多年&#xff0c;从独立游戏到商业项目&#xff0c;启动画面&#xff08;Splash Screen&#xff09;这个看似不起眼的环节&#xff0c;我踩过的坑比想象中多得多。它不仅仅是游戏启动时一闪而过…

作者头像 李华
网站建设 2026/8/6 10:54:21

数据库期末急救指南:核心概念、SQL实战与高频考点解析

1. 项目概述&#xff1a;为什么期末复习需要“急救”&#xff1f;又到期末了&#xff0c;看着《数据库原理与应用》这本厚厚的教材和一堆零散的笔记&#xff0c;是不是感觉无从下手&#xff1f;公式、概念、SQL语句、E-R图、范式……知识点又多又杂&#xff0c;感觉每个字都认识…

作者头像 李华
网站建设 2026/8/6 10:53:41

集团网站群建设:打破信息孤岛,打造数字化协同新生态的实战思考

今天咱们不整那些虚头巴脑的理论,就掏心窝子聊聊一个很多大企业、特别是集团型公司每天都在头疼,却始终没完全解决的事儿:集团网站群建设。你是不是也有过这种经历?你是集团总部负责IT或者品牌传播的领导,底下有一堆子公司、孙公司,大家各自为战,网站风格五花八门,有的…

作者头像 李华