一、解题思路
读完题目之后,需要知道以下几点:
- 当n=1时,默认提供一个’A’,不需要做任何操作。
- 当n=2时,必须执行一次复制’A’的操作。
- 当n>2时,要么执行操作,要么执行复制+粘贴的操作。
实际上你会发现当n>2时,执行操作的所有可能性是一颗二叉树:
那么利用递归就可以很轻松的解决这样的问题:
二、代码实现
const minSteps = n => {
if (n === 1) {
return 0
}
if (n === 2) {
return 2
}
let ans = 2
help(2, 1, 2)
return ans
function help (length, copyLength, step) {
if (length === n) {
ans = step
return
}
if (length > n) {
return
}
// 不复制的情况
help(length + copyLength, copyLength, step + 1)
// 复制 + 粘贴
help(length * 2, length, step + 2)
}
}
如果本文对您有帮助,欢迎关注微信公众号,为您推送更多大前端相关的内容, 欢迎留言讨论,ε=ε=ε=┏(゜ロ゜;)┛。
![](https://i-blog.csdnimg.cn/blog_migrate/43ab120280d7911744b66bfb1fb0499f.jpeg)
您还可以在这些地方找到我: