algorithm - 给定 N,生成所有以 0 开头并以 N 结尾的序列,并且相邻元素之间的差异是 2 的幂 - 在动态规划中
问题描述
我在标题中有问题,我不知道如何使用 DP 优化解决方案。例如,给定 N=5,所有序列将是:
[0 1 2 3 4 5]
[0 1 2 3 5]
[0 1 2 4 5]
[0 1 3 4 5]
[0 1 3 5]
[0 1 5]
[0 2 3 4 5]
[0 2 3 5]
[0 2 4 5]
[0 4 5]
我使用递归https://play.golang.org/p/i2aCQBF01m_T解决了它,有很多计算重复,我不知道如何对其进行动态编程。
例如在:
[0 1 2 3 4 5]
[0 1 3 4 5]
结束部分3 4 5
计算两次。
我想有一张这样的地图,map[int][][]int
但在我看来,空间消耗是错误的。
解决方案
function getSeqs(n) {
let seqs = [[0]]
for (let i = 1; i <= n; i++) {
seqs.push([])
for (let j = 1; j <= i; j *= 2) {
seqs[i] = seqs[i].concat(seqs[i - j].map(t => t * 10 + i))
}
}
return seqs[n].map(t => '0' + t)
}
console.log(getSeqs(5))
推荐阅读
- android - 单击时如何设置特定recyclerview卡的背景颜色(通过方法)
- r - 从图像中检索文本不合适
- python - 如何以这种特定方式打印元组列表?Python
- azure - 如何在 Azure 应用服务中查看控制台或跟踪输出?Console.WriteLine 或 Trace.TraceError
- c++ - 在编译时确定虚方法是否已被覆盖
- c# - 为什么在某些情况下复杂类型需要 [FromBody]?
- javascript - 如何将 sql 添加到 javaScipt 函数中?
- ios - 如何让链接在 iOS 中使用 Xcode/Swift 自动打开 safari 应用程序(不是本地)?
- aframe - A-sky a-frame 圆形边框
- python - 字典 - 相同的键,但必须找到键的最大值