生成一系列数字的所有排列序列
给出了以下算法,我们应该在java中编写它。 但是,当我尝试逐行理解时,它会让人感到困惑,尤其是部分:
A [k + 1:N-1] = S中的值按升序排列
据我所知,该套装在任何时候只有1个号码。 当集合只有1个数时,我们如何替换A[k+1:N-1]
?
令A为升序0
到N-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]。