擅长:python、mysql、java
<p>首先,我们需要一个函数来告诉我们哪些数字是颠倒的:</p>
<pre><code>def is_ud(n):
digits = [int(ch) for ch in str(n)]
check = (len(digits) + 1) // 2
return all(digits[i] + digits[-1 - i] == 10 for i in range(check))
</code></pre>
<p>然后我们生成一些值并查找模式:</p>
^{pr2}$
<p>这给了</p>
<pre><code>1: 1
2: 9
3: 9
4: 81
5: 81
6: 729
7: 729
</code></pre>
<p>所以有81个4位数的解,729个6位数的解;这应该是有意义的,因为6位数的解看起来像“1”+(每个4位数的解)+“9”,“2”+(每个4位数的解)+“8”9“+(每个4位数的解决方案)+“1”-因此,每个4位数的解决方案有9个6位数的解决方案(如果您以这种方式生成它们,您将按升序生成它们)。同样,对于每一个4位数的解决方案,通过在中间粘贴一个5,有一个相应的5位数解。在</p>
<p>看看这张表,你应该可以看到,如果你想要(例如)第200个解,它必须有6位数;事实上,它必须是第19个6位数的解。更重要的是,因为19<;81,它必须看起来像“1”+第19个4位数的解决方案+“9”!在</p>
<p>现在,您已经拥有了编写递归解决方案以直接生成第n个倒挂数字所需的一切。祝你好运!在</p>