HackerRank自适应LED计数器列表索引错误,求代码修正
问题分析
你的代码核心错误在于没有模拟题目中基于连接序列的脉冲触发与进位逻辑,而是直接将观众数转换为数字列表后错误调整,完全忽略了连接序列对计数器工作方式的改变;同时输出顺序也未匹配题目要求的计数器数字格式。
题目中的计数器并非直接显示观众数,而是通过s次脉冲触发,每次脉冲严格按照连接序列定义的路径传递:触发脉冲先进入连接序列的第一个显示器,若该显示器满9则归零并向连接序列的下一个显示器进位,以此类推。最终输出的k位数字是显示器状态从高位到低位的排列(对应显示器编号从大到小的顺序)。
修正代码
def getCounterValues(connections, spectatorCounts): res = [] k = len(connections) for s in spectatorCounts: # 初始化所有显示器为0 display = [0] * k # 模拟s次脉冲触发 for _ in range(s): pos = 0 while pos < k: current_display = connections[pos] display[current_display] += 1 # 无需进位,结束本次脉冲处理 if display[current_display] < 10: break # 进位:归零当前显示器,继续处理下一个连接的显示器 display[current_display] = 0 pos += 1 # 反转显示器列表,匹配题目要求的高位到低位输出顺序 res.append(''.join(map(str, reversed(display)))) return res
代码逻辑说明
- 初始化显示器:创建长度为
k的列表,所有元素初始为0,代表每个LED显示器的初始状态。 - 模拟脉冲触发:
- 对每个观众数
s,执行s次脉冲循环。 - 每次脉冲从连接序列的第一个显示器开始,给对应位置的显示器加1。
- 若加1后数值达到10,则归零该显示器并自动向连接序列的下一个显示器进位,直到无需进位或处理完所有显示器。
- 对每个观众数
- 输出格式调整:将显示器状态反转后转为字符串,确保输出的k位数字符合题目要求的高位到低位顺序。
测试验证
针对你的测试用例:
- 输入
connections=[1,0,2],spectatorCounts=[7,12]s=7:7次脉冲仅触发显示器1递增到7,最终显示器状态为[0,7,0],反转后输出070。s=12:前10次脉冲让显示器1从0→9→0,同时显示器0加1;第11、12次脉冲让显示器1递增到2,最终显示器状态为[1,2,0],反转后输出021。
完全匹配预期结果。
内容的提问来源于stack exchange,提问作者The Outcast
相关产品推荐
相关产品推荐

