leetcode3345 赛博地牢:乘积谜锁

赛博地牢:乘积谜锁

序章:地精守门

你刚传送进地牢,就看见一只绿皮地精翘着二郎腿坐在石门上。
门上的铭文闪烁着阴森的蓝光:

“从 n 开始,找到大于等于它的最小整数,让它的各位数字相乘,能被 t 整除。
找不到?那就留下来给我当抱枕吧~”

你后背一凉,下意识低头看向腰间——那里挂着一把新手村祖传铁剑,剑身上歪歪扭扭刻着两行字:

while True: 砍

地精顺着你的目光瞟了一眼,噗嗤笑出声来:“哈!又是一个想用暴力枚举硬刚的菜鸟。你想超时吗?你想让服务器冒烟吗?!复杂度懂不懂?!优雅懂不懂?!”

你挠挠头:“等等,你这 n 最大才 100?”

地精脸一僵。

你拔剑出鞘:“那优雅个锤子,看爷暴力!”


第一章:暴力连斩

你的策略简单到让地精想给产品经理打差评:

  1. 从 n 开始,一个一个数字试。
  2. 把当前数字拆成各个数位,算它们的乘积。
  3. 如果乘积能被 t 整除,开门!不然就试下一个。

因为数据范围小得离谱(n ≤ 100),你完全可以像推土机一样碾过去。

def smallestNumber(n: int, t: int) -> int:
    while True:                		# 无限连斩,直到门碎
        product = 1
        for x in str(n):     
            product *= int(x)  
            if product % t == 0:  	# 哇!金色传说!整除啦!
                return n     		# 门开了,拜拜地精
        n += 1               		# 没开?下一个数字上来挨砍

你一路砍瓜切菜,地精终于忍不住了:“停停停!!你这什么破算法?就硬砍??你的时间复杂度呢?你的数学直觉呢??”

你手上剑招不停,回头冲他咧嘴一笑:“while True 代表我对暴力学的绝对信仰。数据量小就是可以为所欲为,这是算法界的牛顿第一定律,懂? ”


第二章:带0必杀

地精被你怼得绿脸涨成紫茄子,心态彻底崩了。它从石门上一跃而下,双手结印,浑身冒出红光,脑门上弹出一个明晃晃的状态栏:

【二阶段·狂暴】 技能描述:把数据范围扩到 10⁶ ,让这个嚣张的人类砍到手断!

法阵炸开,石门上的铭文一阵鬼畜般扭曲。地精喘着粗气,嘴角挂着反派专属的歪嘴笑:“来啊!继续暴力啊!10⁶ 的范围,够你砍到版本更新了吧?等着超时吧凡人!”

他双臂交叉,等着看你面露难色、手忙脚乱翻算法书的样子。

你愣了一下,然后仰天长笑:“哈哈哈哈哈——你可真是个小可爱!!” 你擦了擦笑出来的眼泪:“告诉你一个小秘密——从 n 开始往上找,最多试 10 个数字,我的循环自己就结束了。"

“10 次?!”地精尖叫,“10⁶ 的范围你 10 次搞定??你当我是史莱姆吗这么好骗?!”

你指着他的鼻子开始精准输出:

“在一段连续的整数里,每 10 个必定踩到一个个位是 0 的。 而数字里一旦带个 0,乘积直接变成 0——0 能被任何 t 整除!
这个 0,就是我通关的万能钥匙。”

地精低头看了看自己画的狂暴法阵。法阵发出一声闷响——“嘟——",然后像放屁一样散了。

他"扑通"一声跪倒在地,眼神涣散,嘴里念叨着什么"不可能"“带 0 不算"之类的话。

你把铁剑往肩上一扛:“狂暴开完了?那让个路呗?”


第三章:另一扇门

石门轰然碎裂,碎石在半空中化作像素粒子消散——标准的 dungeon 通关特效,你见过一百次了。

你正准备摆个帅气的 pose 等传送门出现,却发现碎石后面露出来的,不是通往下一层的楼梯。

是另一扇门。

一扇通体漆黑、镶着血红纹路的黑曜石门。门缝里渗出暗红色的光,像是什么东西正在门后面缓慢地呼吸。

你凑近一看,门楣上刻着新的铭文,字体比刚才那扇门大了三号,还加粗了——生怕你看不见似的:

【隐藏关卡·已解锁】 给你一个字符串 num,表示一个巨大的整数,和一个整数 t。 找出大于等于 num 的最小无零整数,它的各位之积能被 t 整除。 如果不存在,返回 "-1"

旁边还有一行小字,像是在警告每一个试图忽视它的人:

请睁大你的双眼:该整数 禁止出现数字 0
违规者——将被地牢意志直接抹除。

你感觉脊背发凉。刚刚的“万能钥匙” 0 被封杀了。
而且这次输入的是字符串,意味着 num 可以是几百位、几千位…甚至 20 万位的天文数字。还可能无解,要返回 “-1”(之前可是保证有解的啊!)

你低头看了一眼手中的铁剑,剑身上那行 while True 还在闪。但你清楚地意识到——面对这扇门,暴力连砍是没用的——对面直接开了物理免疫。

地牢深处传来一声低沉的笑——不是地精那种尖嗓门,是一种浑厚的、带着混响的笑,听起来就像某个退隐多年的魔王被吵醒了午觉,正在翻动自己的技能面板。

你握紧剑柄——寒意顺着指尖爬上来,和黑曜石门渗出的暗红光芒混在一起。

真正的挑战,才刚刚开始。

知识共享许可协议
本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可。