我有以下表达式: (2^i * 3^j), i,j >=0 并且我需要按升序枚举它,即 1 2 3 4 6 8 9 12 ....
我正在考虑执行以下操作:维护优先级队列。对于当前 (i,j),我们可以增加 i 或增加 j。计算这些新值的表达式并将它们推入优先级队列。从队列中弹出并继续。我们从 (0,0) 开始。我们还需要维护 (i,j) 以及计算表达式。此外,需要忽略重复项。
我想知道是否有更快的方法来枚举上述表达式,通过保持较小的状态?
沿着这些思路。
results = [1]
i_index = 0
j_index = 0
for(count=0, count<n, count ++){
i_incr = results[i_index]*2 // next value of expression by incrementing i
j_incr = results[j_index]*3 // next value of expression by incrementing j
if (i_incr > j_incr)
results << j_incr
j_index += 1
else if (i_incr < j_incr)
results << i_incr
i_index += 1
else
results << i_incr
i_index += 1
j_index += 1
end
}
状态由i_index
和维护j_index
,它们分别跟踪这些索引未增加的最后一个值。.