给定数字X,您可以执行以下操作之一:
1 - 将X减少1。
2 - 将X递增1。
3 - 如果X是3的倍数,则可以将X除以3。
我认为这个问题有一个O(n)dp解决方案,但如何解决1< = x< = 10 ^ 9?
答案 0 :(得分:0)
这适用于O(2log_3N)时间(如果N~3 ^ n,则需要~2n),因为每一步都是:
因此我们最多需要2次移动才能减少3倍,我们需要做n次。
<input type='number' id='nm'/>
<button onclick='go();'>Go</button>
<br>
<span id='out'/>
<script>
function go() {
var n=nm.value;
var nc=0;
out.textContent=n;
while (n>1) {
n3=n%3;
switch (n3) {
case 0: {n/=3;break;}
case 1: {n--;break;}
case 2: {n++;break;}
}
nc++;
out.textContent+=','+ n;
}
out.textContent+=' ::'+ nc;
}
</script>