思路:從後往前找第乙個公升序對,將pre指標指向公升序對的第乙個元素,然後從後往前找第乙個大於pre指向的數的數字,然後交換該數字和pre指向的數字。然後將pre後面的數字逆過來
比如 1 2 3 4 0的下乙個全排列。從後往前找第乙個公升序對是(3, 4),從後往前找到第乙個大於3的數字是4,即找第乙個大於」 前面找到的公升序對的第乙個元素3 」的數字。 然後交換3和4得到12430,然後再把公升序對後面的數字逆過來,得到12403.即12403就是12340的下乙個排列。
class solution
if(pre >= 0)//找到公升序對
}reverse(num, pre + 1, n - 1);//把pre後的數字順序顛倒過來
} else
return ;
}void reverse(vector& num, int start, int end)
};
stl演算法 next permutation剖析
在標準庫演算法中,next permutation應用在數列操作上比較廣泛.這個函式可以計算一組資料的全排列.但是怎麼用,原理如何,我做了簡單的剖析.首先檢視stl中相關資訊.函式原型 template boolnext permutation bidirectionaliterator first...
next permutation原理剖析
最近刷leetcode的時候遇見next permutation這道題,感覺挺有意思的乙個題目,遞迴的方法是較簡單並且容易想到的,在網上搜了其餘的解法,就是std next permutation非遞迴解法,但是讓人不是很舒服的就是關於原理的部分,千篇一律的都是摘抄 stl原始碼剖析 也就是這樣的。...
演算法 Next Permutation問題》
此問題描述如下 給定乙個陣列,首先從後向前找出最長的遞減序列的前乙個元素,比如陣列中,從後向前最長遞減序列是,這個序列的前乙個元素就是4,然後再遞減序列中找到最後乙個比這個數 4 大的數字 就是5 然後將5與4交換,得到新的陣列,然後將交換過後的遞減序列進行翻轉,最後得到的結果就是。如果陣列單調遞減...