下一个最高数

问题描述:

在重新排列位数号码1862下一个最大的号码是2168下一个最高数

在重新排列位数号码22405下一个最大的号码是22450

什么是寻找下一个最高数的算法?

+0

你说“下一个最高号码”是什么意思?你的意思是通过重新排列原始数字的小数位数可以得到的所有数字中的第二高吗?通过“数学过程”,你是指某种计算机语言或其他东西的算法或代码?我在Object Pascal(Delphi)中有这样的代码,并且很想将它翻译成Python,但是你需要澄清你想要的东西。您还需要告诉我们您迄今为止在这个问题上所做的工作,并显示您所做的任何代码。这不是一项家庭作业回答服务。 –

+1

[查找下一个给定字符串的更大排列的算法]的可能重复(http://*.com/questions/1622532/algorithm-to-find-next-greater-permutation-of-a-given-string) –

+0

这就是['std :: next_permutation'](http://*.com/a/16680391/995714)用于 –

下面是一个算法的总结,它可以做你想做的事情。如果您想了解更多细节,代码或算法正确性的证明,请向我们展示您迄今为止所做的更多。

我们以1862为例。从最右边的数字向左扫描该数字的数字,直到找到连续的一对数字,其中左边的数字小于右边的数字。在这种情况下,这是18。我们把这个左边数字称为“枢轴”位置(这里是1)。您现在将重新排列以该数据透视开始的数字中的数字。用位于其右侧任何位置的下一个更大的数字替换主键(在这种情况下为2)。然后在该数字之后,将所有其他数字放在原点的右侧(在这种情况下为186),并按升序排列(此处为168)。结果是您的答案2168

在您的其他示例22405中,您可以扫描并在05处停止。在这种情况下,您将0替换为5,然后将其他数字(0)替换后按照升序排列。所以你离开224独自一个,并最终22450

如果在您的反向扫描中,您没有发现任何连续的一对数字,其中左边的数字小于右边的数字,那么这些数字没有更大的数字。

有一个技巧可以按照递增的顺序加快数字的位置,但我会把它留给你。