You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HackerRank问题:如何用Lambda函数或单行循环实现二进制位翻转

解决整数32位二进制位翻转问题

你的代码语法问题分析

你之前的写法存在两个核心语法错误:

  1. Lambda表达式中不能使用赋值语句(x = '1'这种写法不合法),Lambda需要直接返回表达式结果。
  2. 列表推导式里只能写表达式,不能写赋值操作,且你第二次写法里错误地遍历了整数n而非转换后的字符串g。

正确的单行实现方式

方式1:纯列表推导式(最简洁)

直接遍历32位二进制字符串的每个字符,用三元表达式生成翻转后的字符列表:

g = '{0:032b}'.format(n)
res = ['1' if c == '0' else '0' for c in g]
# 若需要拼接成完整字符串,执行以下步骤
res_str = ''.join(res)

方式2:结合Lambda与Map

用Lambda定义翻转逻辑,再通过map函数批量处理字符串中的每个字符:

g = '{0:032b}'.format(n)
res = list(map(lambda c: '1' if c == '0' else '0', g))
res_str = ''.join(res)

更高效的位运算实现(无需字符串转换)

其实不需要转成二进制字符串,直接用位运算异或就能完成32位翻转,这是性能更优的方案:
32位全1的整数可以用0xFFFFFFFF(或(1 << 32) - 1)表示,将原整数与它做异或运算,每一位0会变成1,1会变成0:

flipped_n = n ^ 0xFFFFFFFF
# 若需要转成32位二进制字符串验证
flipped_str = '{0:032b}'.format(flipped_n)

这种方法跳过了字符串转换的开销,直接操作底层二进制位,执行效率更高。

内容的提问来源于stack exchange,提问作者NK Rao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 23:15:41