LeetCode(31) Next Permutation

來源:互聯網
上載者:User

標籤:

題目

Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers.

If such arrangement is not possible, it must rearrange it as the lowest possible order (ie, sorted in ascending order).

The replacement must be in-place, do not allocate extra memory.

Here are some examples. Inputs are in the left-hand column and its corresponding outputs are in the right-hand column.
1,2,3 → 1,3,2
3,2,1 → 1,2,3
1,1,5 → 1,5,1

分析

本題考查字典序排列:
把升序的排列(當然,也可以實現為降序)作為當前排列開始,然後依次計算當前排列的下一個字典序排列。
演算法思想:
對當前排列從後向前掃描,找到一對為升序的相鄰元素,記為i和j(i < j)。如果不存在這樣一對為升序的相鄰元素,則所有排列均已找到,演算法結束;否則,重新對當前排列從後向前掃描,找到第一個大於i的元素k,交換i和k,然後對從j開始到結束的子序列反轉,則此時得到的新排列就為下一個字典序排列。這種方式實現得到的所有排列是按字典序有序的,這也是C++ STL演算法next_permutation的思想。

AC代碼
class Solution {public:    //尋找整數序列num的下一個全排序列    void nextPermutation(vector<int> &num) {        if (num.size() < 2) return;        int i, k;        for (i = num.size() - 2; i >= 0; --i)             if (num[i] < num[i + 1])                 break;        //若不存在子升序,則說明當前排列是最大排列,此時i = -1,下一排列即是最小排列,翻轉整個序列即可        if (i < 0)        {            reverse(num.begin() , num.end());            return;        }        //找到了子升序        for (k = num.size() - 1; i >= 0 && k > i ; --k)            if (num[i] < num[k])                 break;        if (i >= 0)        {            swap(num[i], num[k]);            reverse(num.begin() + i + 1, num.end());            return;        }    }};

GitHub測試程式源碼

LeetCode(31) Next Permutation

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.