【发布时间】:2019-08-21 17:39:59
【问题描述】:
我正在尝试找到“丑陋”的数字,它是一系列唯一素因数为 [2,3,5] 的数字。
我找到了动态编程解决方案,并想了解它的工作原理以及逻辑背后的数学直觉。
算法是为 2、3 和 5 的倍数保留三个不同的计数器变量。假设 i2、i3 和 i5。
声明丑数组并将0索引初始化为1,因为第一个丑数是1。
初始化 i2=i3=i4=0;
ugly[i] = min(ugly[i2]*2,丑陋[i3]*3,丑陋[i5]*5) 并增加 i2 或 i3 或 i5 所选择的索引。
试运行:
ugly = |1|
i2=0;
i3=0;
i5=0;
ugly[1] = min(ugly[0]*2, ugly[0]*3, ugly[0]*5) = 2
---------------------------------------------------
ugly = |1|2|
i2=1;
i3=0;
i5=0;
ugly[2] = min(ugly[1]*2, ugly[0]*3, ugly[0]*5) = 3
---------------------------------------------------
ugly = |1|2|3|
i2=1;
i3=1;
i5=0;
ugly[3] = min(ugly[1]*2, ugly[1]*3, ugly[0]*5) = 4
---------------------------------------------------
ugly = |1|2|3|4|
i2=2;
i3=1;
i5=0;
ugly[4] = min(ugly[2]*2, ugly[1]*3, ugly[0]*5) = 5
---------------------------------------------------
ugly = |1|2|3|4|5|
i2=2;
i3=1;
i5=1;
ugly[4] = min(ugly[2]*2, ugly[1]*3, ugly[0]*5) = 6
---------------------------------------------------
ugly = |1|2|3|4|5|6|
我迷失了如何从 2 的索引中形成 6。谁能简单解释一下?
【问题讨论】:
标签: algorithm