[英]Generate a sequence of all permutation of some range of numbers
給出了以下算法,我們應該用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
所顯示的算法與按字典順序的Generation相似。 您可以閱讀該文章以獲取更多信息。
@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]。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.