生成一系列数字的所有排列序列

给出了以下算法,我们应该在java中编写它。 但是,当我尝试逐行理解时,它会让人感到困惑,尤其是部分:

A [k + 1:N-1] = S中的值按升序排列

据我所知,该套装在任何时候只有1个号码。 当集合只有1个数时,我们如何替换A[k+1:N-1]

令A为升序0N-1的整数序列(假设它是int[N]的数组)。

 next_permutation(A): k = N-1 S = { } while k >= 0: if S contains a value larger than A[k]: v = the smallest member of S that is larger than A[k] remove v from S insert A[k] in S A[k] = v A[k+1:N-1] = the values in S in ascending order. return true else: insert A[k] in S k -= 1 return false 

所示算法类似于字典顺序中的生成 。 您可以阅读该文章以获取更多信息。

@templatetypedef关于如何用升序中的值替换数组中的项目的任何线索? 例如,A [k + 1:N-1] = S中的值按升序排列。 我应该使用toArray()吗?

这不是必需的。 您可以尝试始终对S数组进行排序。 每次要在数组中插入新数字时,都要将其插入到数组中,这样数组就可以保持排序状态。 例如,如果到目前为止你有S = [5 7 8]而你想要插入6 ,则插入5到7之间 – S = [5 6 7 8] 。 这样,替换步骤只是将元素从S复制到A [k + 1:N-1]。