公司新来了一个领导,38岁,刚来就把我的工资从1w调到1.5w,领导说,我是唯一的35岁老员工,要互相帮忙。。
算法题:灯泡开关
n 个灯泡,从 1 到 n 排成一排。最开始,这些灯泡都是关闭的。然后你会进行 n 次操作,第一次操作时,你会切换所有灯泡的状态(开灯或者关灯);第二次操作时,你会切换所有编号为 2 的倍数的灯泡;第三次操作时,切换所有编号为 3 的倍数的灯泡,以此类推,直到第 n 次操作,你只切换编号为 n 的灯泡。代码分析
k 次操作。那么,我们知道只有那些灯泡编号是 k 的倍数的灯泡会被切换。换句话说,如果一个灯泡编号是多个操作的倍数,它的状态就会被切换多次。Python代码实现
n 的所有整数,找出其中的完全平方数即可。来,看看这段代码:import math def bulbSwitch(n):
# 计算 1 到 n 中完全平方数的个数
return int(math.sqrt(n))# 测试一下
n = 10
print(f"开着的灯泡数量:{bulbSwitch(n)}") # 输出 3,因为 1, 4, 9 是完全平方数
代码解读
n 中最大的整数平方小于等于 n 的值。比如,n = 10 时,最大的完全平方数是 9,因此,1、4、9 是开着的灯泡,最后的结果就是 3。math.sqrt(n) 可以得到 n 的平方根,返回的结果是一个浮动的数字,我们使用 int() 将其转换为整数,得到的是完全平方数的个数。比如在 n = 10 时,sqrt(10) 会返回 3.16,转为整数后就是 3。为什么这样做能解题?
n 中有多少个完全平方数,我们就能快速得到答案。这比逐一模拟每个开关的过程要高效得多。对编程、职场感兴趣的同学,大家可以联系我微信:golang404,拉你进入“程序员交流群”。
虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》。