一個易于理解的C++全排列(permutation)實現(xiàn)

通常我們用這兩條語句可以得到一個數(shù)組的全排列:

sort(nums.begin(),nums.end());  //調(diào)用next_permutation求全排列的時候必須先給容器排序
do{
      get_pirnt(nums)  //這里是一個可以打印輸出nums的函數(shù)
}while(next_permutation(nums.begin(),nums.end()); //調(diào)用該C++內(nèi)置函數(shù)可以輸出字典序大于當(dāng)前nums的所有排列。

還可以自己寫一個函數(shù)實現(xiàn)同樣的功能,下面的函數(shù)使用遞歸歇竟,每次取出當(dāng)前數(shù)組中的一個值,求出除掉它之后的數(shù)組的所有全排列抵恋,然后把它加到每一個全排列的開頭焕议。

class Solution {
public:
    vector<vector<int>> solution(vector<int>& nums)
    {   
        vector<vector<int>> res;
        vector<int> one;
        if(nums.size()==1) //如果數(shù)組只剩一個元素,則遞歸結(jié)束
        {
            one.push_back(nums[0]);
            res.push_back(one);
            return res;
        }
        
        for(int i=0;i<nums.size();i++) //每次從當(dāng)前nums里取第i個數(shù)
        {
            vector<int> row(nums.begin(),nums.end());
            vector<int>::iterator index = row.begin()+i;
            row.erase(index);  //把第i個數(shù)從數(shù)組row里刪除

            vector<vector<int>> current = solution(row); //把刪除了第i個數(shù)之后的數(shù)組進行全排列,得到current
            for(int j=0;j<current.size();j++)
            {    //把current里的每一行數(shù)組的開頭都加上nums[i]
                vector<int>::iterator it = current[j].begin();
                current[j].insert(it,nums[i]);
                res.push_back(current[j]);
            }
        }
        return res;
    }
    vector<vector<int>> permute(vector<int>& nums) {
        return solution(nums);
    }
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末弧关,一起剝皮案震驚了整個濱河市盅安,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌世囊,老刑警劉巖别瞭,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異株憾,居然都是意外死亡蝙寨,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門嗤瞎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來墙歪,“玉大人,你說我怎么就攤上這事贝奇『绶疲” “怎么了?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵弃秆,是天一觀的道長届惋。 經(jīng)常有香客問我,道長菠赚,這世上最難降的妖魔是什么脑豹? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮衡查,結(jié)果婚禮上瘩欺,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好俱饿,可當(dāng)我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布歌粥。 她就那樣靜靜地躺著,像睡著了一般拍埠。 火紅的嫁衣襯著肌膚如雪失驶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天枣购,我揣著相機與錄音嬉探,去河邊找鬼。 笑死棉圈,一個胖子當(dāng)著我的面吹牛涩堤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播分瘾,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼胎围,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了德召?” 一聲冷哼從身側(cè)響起白魂,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎上岗,沒想到半個月后碧聪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡液茎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了辞嗡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捆等。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖续室,靈堂內(nèi)的尸體忽然破棺而出栋烤,到底是詐尸還是另有隱情,我是刑警寧澤挺狰,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布明郭,位于F島的核電站,受9級特大地震影響丰泊,放射性物質(zhì)發(fā)生泄漏薯定。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一瞳购、第九天 我趴在偏房一處隱蔽的房頂上張望话侄。 院中可真熱鬧,春花似錦、人聲如沸年堆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽变丧。三九已至芽狗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間痒蓬,已是汗流浹背童擎。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留谊却,地道東北人柔昼。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像炎辨,于是被迫代替她去往敵國和親捕透。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法碴萧,類相關(guān)的語法乙嘀,內(nèi)部類的語法,繼承相關(guān)的語法破喻,異常的語法虎谢,線程的語...
    子非魚_t_閱讀 31,639評論 18 399
  • 第2章 基本語法 2.1 概述 基本句法和變量 語句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,149評論 0 13
  • 大多人只有極力反駁的份沒有主動認(rèn)錯的想法 雖然有些人固執(zhí)的認(rèn)為自己并沒有錯 說到底你根本不是別人要在乎并且不希望失...
    大大大大大臉閱讀 148評論 0 1
  • 這個謎一樣的男人曹质,我能感受到他的心 再往后幾年婴噩,我就是你
    夏晨sl閱讀 348評論 0 0
  • 星城的秋,來得有點猝不及防 羽德, 一場秋雨過后 几莽, 將三十多度的氣溫 , 一夜之間降到了二十多度 宅静, 讓我這個初來乍...
    逝我閱讀 317評論 2 3