Permutations

求一個(gè)數(shù)組的全排列锭环。

遇到的問題:

1.忘記了字典序排列的定義聪全;
2.思考時(shí)間過長;
3.沒有及時(shí)找到全排列和字典序之間的關(guān)系辅辩;

想到的解題思路:

1.用字典序找到下一個(gè)排序难礼;
2.全排序共有n!種組合,找夠停止循環(huán)玫锋;

代碼如下:

class Solution {
    public List<List<Integer>> permute(int[] nums) {
        List<List<Integer>> ans = new ArrayList<>();
// 如果數(shù)組長度是零直接返回
        if(nums.length == 0)
            return ans;
//求數(shù)組全排列
        int n = nums.length;
        int sum = 1;
        for(int i=2;i<=n;i++)
            sum *=i;
        for(;sum>0;sum--){
            ans.add(nextPermutation(nums));
        }
        return ans;
    }
//按照字典序求下一個(gè)排列
    public List<Integer> nextPermutation(int[] nums){
        int flag = 0;
        int j = 0;
//從頭開始找到比右邊數(shù)字的小的數(shù)的最大序號j
        for(int i=0;i<nums.length-1;i++){
            if(nums[i]<nums[i+1]){
                flag = i;
                if(flag > j)
                    j = flag;
            }
        }
        List<Integer> l = new ArrayList<>();
        int k = 0;
//從j開始蛾茉,找到比j大的最小的數(shù)的序號k
        for(int i=j+1;i<nums.length;i++){
            if(nums[i]>nums[j])
                k = i;
            else
                break;
            }
        if(k == 0)
            Arrays.sort(nums);
        else{
//交換j,k
            int tmp = nums[j];
            nums[j] = nums[k];
            nums[k] = tmp;
//倒置j+1到n-1之間的數(shù)得到字典序的下一個(gè)排列
            for(int i=1;i<=(nums.length-j-1)/2;i++){
                tmp = nums[nums.length-i];
                nums[nums.length-i] = nums[j+i];
                nums[j+i] = tmp;
            }
        }
        for(int i=0;i<nums.length;i++)
            l.add(nums[i]);
        return l;
    }
}

附加內(nèi)容:

1.字典序的概念:

設(shè)P是1~n的一個(gè)全排列

1)從排列的右端開始撩鹿,找出第一個(gè)比右邊數(shù)字小的數(shù)字的序號j(j從左端開始計(jì)算)谦炬,即 j=max{i|pi<pi+1}

2)在pj的右邊的數(shù)字中,找出所有比pj大的數(shù)中最小的數(shù)字pk节沦,即 k=max{i|pi>pj}(右邊的數(shù)從右至左是遞增的键思,因此k是所有大于pj的數(shù)字中序號最大者)

3)對換pj,pk

4)再將pj+1......pk-1pkpk+1......pn倒轉(zhuǎn)得到排列p'=p1p2.....pj-1pjpn.....pk+1pkpk-1.....pj+1甫贯,這就是排列p的下一個(gè)排列吼鳞。

2.全排列概念:

從n個(gè)不同元素中任取m(m≤n)個(gè)元素,按照一定的順序排列起來叫搁,叫做從n個(gè)不同元素中取出m個(gè)元素的一個(gè)排列。當(dāng)m=n時(shí)所有的排列情況叫全排列常熙。
公式:全排列數(shù)f(n)=n!(定義0!=1)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末碱茁,一起剝皮案震驚了整個(gè)濱河市裸卫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌纽竣,老刑警劉巖墓贿,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茧泪,死亡現(xiàn)場離奇詭異,居然都是意外死亡聋袋,警方通過查閱死者的電腦和手機(jī)队伟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來幽勒,“玉大人嗜侮,你說我怎么就攤上這事∩度荩” “怎么了锈颗?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長咪惠。 經(jīng)常有香客問我击吱,道長,這世上最難降的妖魔是什么遥昧? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任覆醇,我火速辦了婚禮,結(jié)果婚禮上炭臭,老公的妹妹穿的比我還像新娘永脓。我一直安慰自己,他們只是感情好鞋仍,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布憨奸。 她就那樣靜靜地躺著,像睡著了一般凿试。 火紅的嫁衣襯著肌膚如雪排宰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天那婉,我揣著相機(jī)與錄音板甘,去河邊找鬼。 笑死详炬,一個(gè)胖子當(dāng)著我的面吹牛盐类,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播呛谜,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼在跳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了隐岛?” 一聲冷哼從身側(cè)響起猫妙,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎聚凹,沒想到半個(gè)月后割坠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體齐帚,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年彼哼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了对妄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,605評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡剪菱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出琅豆,到底是詐尸還是另有隱情篓吁,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布冻押,位于F島的核電站盛嘿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏稿茉。R本人自食惡果不足惜芥炭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一园蝠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧彪薛,春花似錦、人聲如沸少态。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽训挡。三九已至,卻和暖如春为肮,著一層夾襖步出監(jiān)牢的瞬間肤京,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工忘分, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人重斑。 一個(gè)月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓肯骇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親笛丙。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評論 2 348

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