排列,组合,子集专题

排列组合的题用回溯法和递归基本可以解决,总结一下。
46.全排列

46

手动模拟全排列的思想,就是固定一个数,然后让后面的继续做全排列,为了保证排列不一样,需要保证固定的数不一样。
sol1

sol2

这两份代码其实是一样的,不过上面那份用了引用,多了个交换的操作,都是每次固定不同的左端,然后继续递归进行全排列。
非递归算法参见https://blog.csdn.net/u014106644/article/details/83988102
非递归算法

sol3.1

sol3.2

47.全排列II


47

47比46多了个序列可重复的条件,意味着我们需要在46题基础上做个去重的操作,然后我们考虑在上面的两个模板上分别改一下。

sol2

第三种非递归写法,和上面那道题代码只有一处不一样


sol1

28行不一样

  1. 下一个排列


    31

    这道题的写法就是非重全排列的非递归写法中的一次寻找


    sol1.1

    sol1.2

60第k个排列


60

这道题有两种解法,一种就是把模拟下一次排列K次,比较慢,第二种采取数学方法做。


sol1.1

sol1.2

数学方法:待补

77组合


77

这道题可以做个剪枝,在18到19行,主要还是采取了回溯法。
77

39组合总和
39

这道题和上面那道题的不同之处在于限制条件不同,但思想还是回溯法进行挑选,还是要注意剪枝
39

40.组合总和 II
40

和上一道区别是元素可重复,但只能用一次。
这道题有两种解法:
sol1.转换成上面一道题,把重复的元素理解为单个元素可以重复取多次
sol2.通过比较相邻的点来进行判断是否重复选取
sol1明显好理解一点,在记录重复取的次数可以用unordered_map来保存,O(1)复杂度读取,分2种情况,如果可重复次数>1,那么仍然可以重复取这个数,如果==1,那么直接跳到下一个数。


sol1.1

sol1.2

sol2.如果前一个数没选取,但选取的数和前一个重复时,这种情况可以不要,也算一个剪枝,但不太好想。
sol2

216组合总和 III
216
sol1

377组合总和 Ⅳ


377

tle

dfs复杂度太高了,t掉了,这道题没要求输出组合的结果,正确解法应该是dp,更确切的说记忆化dfs。


sol

78子集
78

sol

90子集 II


90

sol1

784字母大小写全排列


784

sol1.1

sol1.2

996正方形数组的数目


996

这道题就是47题全排列的改编版,进一步进行条件约束,注意边界。
sol1.1

sol1.2

排列是在原数组上两两交换,组合和子集是在容器里进行,子集是立刻输出,排列和组合是符合要求再输出

然后总而言之上面写的有点复杂,我们用标记数组的方式,用最简单的dfs的方式来写一遍,比较好理解
排列的题可以对path的位置做标记。。
46.code. https://leetcode-cn.com/submissions/detail/21611688/ (不重复排列) 输出字典序
47.code. https://leetcode-cn.com/submissions/detail/21612550/(重复排列)
组合的题
77.code.https://leetcode-cn.com/submissions/detail/21635210/ (不重复组合)
39.code. https://leetcode-cn.com/submissions/detail/18719647/ (重复组合总和)
40.code.https://leetcode-cn.com/submissions/detail/21638733/ (不重复组合总和)
216.code. https://leetcode-cn.com/submissions/detail/21639856/
377.code.https://leetcode-cn.com/submissions/detail/21641035/ (dp计数)
子集的题
78.code. https://leetcode-cn.com/submissions/detail/21641879/ (不重复子集)
90.code. (重复子集)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容