軟體設計藝術大師基本功 尋找字元的所有可能排列

2021-08-15 18:40:00 字數 1116 閱讀 6311

author: frank

描述:

輸入乙個字串,輸出該字串的字元的所有的排列,例如輸入abc輸出為6個排列:abc, acb, bca, bac, cab,cba。

分析:

以abcd這個含有4個字元的字串為例,對於其排列,首先排在第一位的字元可能為a,b,c,d四種情況,如果第一位是a,則後面3位是bcd的排列,同樣地對於bcd的排列,排在第一位的字元有三種情況。可以用遞迴的方法來實現!

首先,求所有可能出現在第一位置的字元,即把第乙個字元逐個和後面所有的字元交換。對於除第乙個字元外的其他剩餘字元,用同樣的方法。具體請看**實現:

void permutation(char* pstr,char* pbegin)

}

測試:

更簡潔的乙個解法:

void swap(vector& vec, int idx1, int idx2) 

int temp = vec[idx1];

vec[idx1] = vec[idx2];

vec[idx2] = temp;

}//vec:儲存char,

//stidx:關注vec[stidx]到vec[vec.size-1]

//pre_vec:做快取

//例如,abc,先關注,以b開頭的,則pre_vec.push_back(b), 然後只需求解ac這兩個字元總共有多少個組合即可。

void findcombina(vector& vec, int stidx, vector& pre_vec) ;

vectorpre_vec;

findcombina(vec,0, pre_vec);

return 1;

}

參考:

《劍指offer》

平面設計的基本功

昨天下午,北服 佛萊士國際學院電腦美術設計專業的五位應屆畢業生來工作室參觀。他們中可能會有一或二位學生在今後的三個月裡來工作室實習。這五位青年的導師詹姆士 james blair thompson 希望他們在今後的工作中能繼續學習到有關設計的實用知識。五位青年對工作室很感興趣,東瞧西看了一大陣子,最...

平面設計的基本功

昨天下午,北服 佛萊士國際學院電腦美術設計專業的五位應屆畢業生來工作室參觀。他們中可能會有一或二位學生在今後的三個月裡來工作室實習。這五位青年的導師詹姆士 james blair thompson 希望他們在今後的工作中能繼續學習到有關設計的實用知識。五位青年對工作室很感興趣,東瞧西看了一大陣子,最...

中小學藝術教師基本功大賽

2015年6月,上海市首屆中小學藝術教師基本功大賽新聞通氣會在徐匯中學舉行。經過近三個月的籌備與評比,藝術 美術三門學科的比賽順利落幕。徐匯中學青年教師陳翔代表徐匯區參加美術學科比賽。陳翔老師本著對藝術教育的熱愛 對學生的真誠 以美育人 的宗旨,全心在教師的崗位上投入自己的熱忱,曾獲得2014年徐匯...