作者:冰糖鸽子
一道不错的字符串+宽搜练手题
思路
首先显而易见的是,关于一个数字能到达的数字的最大长度,咱们分别看三个操作:
- 操作1,位数不变
- 操作2,位数减少
- 操作3,位数加一,但不会超过初始数字的长度
所以可以得出结论:不管怎么变化,数字的长度都不会超过原数字的长度,也就是最大只能搜索到 99999 , 所以毫不犹豫用宽搜
而在宽搜中,第一次被搜到肯定是最佳答案,所以可以加上一个记忆化,复杂度降到 $\operatorname{O(nm )}$ , 其中 $m$ 是while中运行一次需要的时间,在我的程序中,$m$ 约是 $\operatorname{l^3}$,$l$ 是原数的位数
最多约需要 $\operatorname{O(12500000)}$ 的时间,完全可以在 1s 内跑出来
最后提一句,因为这三个操作需要插入,删除,交换什么的,所以我用了 string
来存储数字
代码
- 细节说明:在开始把原数的答案设成 $1$ 而不是 $0$ , 意味着所有可通过原数转换到的数的答案都大一,所以输出时要减一。而这样处理完后,不可通过原数转换到的数的答案在减一后就是 $-1$ , 正好符合题目要求
1 |
|
本文作者:
益题 Yitee
发布时间: 2020-12-10
最后更新: 2021-08-19
本文标题: 16.数字生成游戏
本文链接: https://yitee.top/posts/5649.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明出处!
发布时间: 2020-12-10
最后更新: 2021-08-19
本文标题: 16.数字生成游戏
本文链接: https://yitee.top/posts/5649.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明出处!
