给出了以下算法,我们应该在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
答案 0 :(得分:1)
显示的算法类似于Generation in lexicographic order。您可以阅读该文章以获取更多信息。
@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]。