每周一道算法題(三十五)

最近換了工作,房子到期了又到處去看房子装诡,加上周末還要上課做作業(yè),感覺好累践盼,精神總不容易集中鸦采,導致本周的題目斷斷續(xù)續(xù)弄了好幾天才做出來,看來還是要好好休息啊咕幻。本周題目難度級別'Medium'渔伯,使用語言C

題目:本周題目很簡單,就是給你一組不重復的數肄程,要求返回這組數的全排列集合锣吼。例如給你[1,2,3],你要返回的是[[1,2,3],[1,3,2],[2,3,1],[2,1,3],[3,1,2],[3,2,1]]

思路:這個我想了很多选浑,也嘗試了很多,中間走的坑我就不說了玄叠,直接講最后的結果吧古徒,我是用的迭代,一列一列的寫读恃,寫完一列隧膘,下一列繼續(xù)按規(guī)律寫,下圖展示的是[1,2,3,4]的全排列(一行代表一組)狐粱,以下圖為例舀寓,我們可以看出幾個規(guī)律:

1.全排列組合的個數就是給定的數的階層。(如下圖4!=24個)
2.倒數第三列以前就是給定的數的循環(huán)(圖中有顏色的部分)肌蜻。
3.沒有了互墓,用前兩條就夠了。
[1,2,3,4]的全排列

然后擼起袖子看代碼(從注釋下面的permute函數看起):

    void newPermute(int* nums, int numsSize, int row, int col, int** result, int count) {
    if (numsSize == 1) {
        //只有一位
        result[row][col] = nums[0];
    }else {
        //還有好多位蒋搜,需要繼續(xù)迭代
        int newCount = numsSize-1;
        int divisor = count / numsSize;
        //遍歷數組
        for(int i = 0; i < numsSize; i++){
            //賦值(有顏色的那部分)
            for (int j = 0;j < divisor; j++) {
                result[i*divisor+row+j][col] = nums[I];
            }
            //構造出新的需要全排列的集合
            int* tempResult = malloc(sizeof(int) * newCount);
            for (int k = 0; k < newCount; k++) {
                if (k < i) {
                    tempResult[k] = nums[k];
                }else {
                    tempResult[k] = nums[k+1];
                }
            }
            //調用遞歸(新的需要排列組合的集合篡撵,集合的個數,從第幾行開始豆挽,從第幾列開始育谬,結果容器,總長度)
            newPermute(tempResult, newCount, i*divisor+row, col+1, result, divisor);
        }
    }
}
/**
 * Return an array of arrays of size *returnSize.
 * Note: The returned array must be malloced, assume caller calls free().
 */
int** permute(int* nums, int numsSize, int* returnSize) {
    //先利用第一條算出n帮哈!
    *returnSize = 1;
    for (int i = 2; i <= numsSize; i++) {
        *returnSize *= I;
    }
    //根據個數開辟空間膛檀,初始化容器
    int** result = malloc(sizeof(int*) * *returnSize);
    for (int i = 0; i < *returnSize; i++) {
        result[i] = malloc(sizeof(int) * numsSize);
    }
    //調用遞歸(參數含義依次是:新的需要排列組合的集合,集合的個數娘侍,從第幾行開始咖刃,從第幾列開始,結果容器憾筏,處理個數)
    newPermute(nums, numsSize, 0, 0, result, *returnSize);
    return result;
}

效率一般嚎杨,然后和小伙伴們聊的時候發(fā)現C還是挺麻煩的,主要麻煩在需要處理內存氧腰,要開辟空間枫浙、要初始化,二維指針開辟完空間還要給一維空間開辟指針古拴,分別初始化箩帚。。斤富。

版權聲明:本文為 Crazy Steven 原創(chuàng)出品膏潮,歡迎轉載,轉載時請注明出處!

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末满力,一起剝皮案震驚了整個濱河市焕参,隨后出現的幾起案子轻纪,更是在濱河造成了極大的恐慌,老刑警劉巖叠纷,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刻帚,死亡現場離奇詭異,居然都是意外死亡涩嚣,警方通過查閱死者的電腦和手機崇众,發(fā)現死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來航厚,“玉大人顷歌,你說我怎么就攤上這事♂2牵” “怎么了眯漩?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長麻顶。 經常有香客問我赦抖,道長,這世上最難降的妖魔是什么辅肾? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任队萤,我火速辦了婚禮,結果婚禮上矫钓,老公的妹妹穿的比我還像新娘要尔。我一直安慰自己,他們只是感情好新娜,可當我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布盈电。 她就那樣靜靜地躺著,像睡著了一般杯活。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上熬词,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天旁钧,我揣著相機與錄音,去河邊找鬼互拾。 笑死歪今,一個胖子當著我的面吹牛,可吹牛的內容都是我干的颜矿。 我是一名探鬼主播寄猩,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼骑疆!你這毒婦竟也來了田篇?” 一聲冷哼從身側響起替废,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎泊柬,沒想到半個月后椎镣,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡兽赁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年状答,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片刀崖。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡惊科,死狀恐怖,靈堂內的尸體忽然破棺而出亮钦,到底是詐尸還是另有隱情馆截,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布或悲,位于F島的核電站孙咪,受9級特大地震影響,放射性物質發(fā)生泄漏巡语。R本人自食惡果不足惜翎蹈,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望男公。 院中可真熱鬧荤堪,春花似錦、人聲如沸枢赔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽踏拜。三九已至碎赢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間速梗,已是汗流浹背肮塞。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留姻锁,地道東北人枕赵。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像位隶,于是被迫代替她去往敵國和親拷窜。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內容

  • 【1】7,9篮昧,-1赋荆,5,( ) A恋谭、4糠睡;B、2疚颊;C狈孔、-1;D材义、-3 分析:選D均抽,7+9=16;9+(-1)=8其掂;(...
    Alex_bingo閱讀 18,939評論 1 19
  • 指針是C語言中廣泛使用的一種數據類型油挥。 運用指針編程是C語言最主要的風格之一。利用指針變量可以表示各種數據結構款熬; ...
    朱森閱讀 3,446評論 3 44
  • 1深寥、線性表、棧和隊列等數據結構所表達和處理的數據以線性結構為組織形式贤牛。棧是一種特殊的線性表惋鹅,這種線性表只能在固定的...
    霧熏閱讀 2,403評論 0 10
  • 在一期《最強大腦》的賽場上闰集,看到一個選手,可以從百千片樹葉的葉脈中般卑,分辨出各自不同的身份武鲁。這是一個異于常人的大腦,...
    考拉淺淺笑閱讀 120評論 0 1
  • 李果果是快要大學畢業(yè)的大四學生蝠检,眼看自己要畢業(yè)了沐鼠,卻連一篇成型的論文都不會寫,更是在最緊要的考研關頭看小說叹谁,看電視...
    小臉妹閱讀 189評論 0 0