取得された装置の機能を達成するため、所定のアルゴリズムは、辞書的に大きい構成で次のシーケンス番号を再配置が必要です。
次に大きな配列が存在しない場合、再配列アラインメント(すなわち、昇順)の最小数。
あなただけの一定の追加のスペースを許可する、編集を配置する必要があります。
以下は、右の列に対応する出力で、いくつかの例では、左側の入力欄です。
→1、3,2、2,3、
3,2,1→、2、3
1,1,5 1,5,1→
出典:滞在ボタン(LeetCode)
//leetcode-cn.com/problems/next-permutation:リンク:httpsの
すべてのネットワークからの控除が著作権を保有。商業転載は、ソースを明記してください許可公式、非商用の転載をご連絡ください。
パブリック クラスソリューション{ 公共 ボイド nextPermutation(INT [] NUMS){ int型 I = nums.length - 2 。 一方、(I> = 0 && NUMS [I + 1] <= NUMS [I]){ I - 。 } もし(I> = 0 ){ int型 J = nums.length - 1 。 一方、(j> = 0 && NUMS [J] <= NUMS [I]){ J - 。 } スワップ(NUMS、I、J)。 } (NUMS、I逆 + 1 )。 } プライベート ボイド逆(INT [] NUMS、int型の開始){ int型 I =開始、J = nums.length - 1 。 一方、(I < J){ スワップ(NUMS、I、J)。 I ++ ; J - ; } } プライベート ボイドスワップ(INT [] NUMS、int型 I、int型のJ){ int型の TEMP = NUMS [I]。 NUMS [I] = NUMS [J]。 NUMS [J] = TEMP。 } }
最初は、上部(背面)から右よりも大きいので、この高い位置に、スワップに高い必要性を選択することであるとの最小数
その後、我々は尾が左から右に降順になるように、その「秩序尾」、速やかに交換を確保する必要がある前に、プロセスので、
この質問は数学で、共通の問題を分析するのは難しいことではありません。