Skip to content

Commit e394fcc

Browse files
committed
regular leetcode
1 parent 7c74657 commit e394fcc

File tree

1 file changed

+123
-0
lines changed

1 file changed

+123
-0
lines changed

077._combinations.md

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
###77. Combinations
2+
3+
4+
题目:
5+
<https://leetcode.com/problems/combinations/>
6+
7+
8+
难度 : Medium
9+
10+
11+
思路一:
12+
python作弊法
13+
14+
```
15+
import itertools
16+
p = [4, 8, 15, 16, 23, 42]
17+
c = itertools.combinations(p, 4)
18+
for i in c:
19+
print i
20+
21+
结果:
22+
23+
(4, 8, 15, 16)
24+
(4, 8, 15, 23)
25+
(4, 8, 15, 42)
26+
(4, 8, 16, 23)
27+
(4, 8, 16, 42)
28+
(4, 8, 23, 42)
29+
(4, 15, 16, 23)
30+
(4, 15, 16, 42)
31+
(4, 15, 23, 42)
32+
(4, 16, 23, 42)
33+
(8, 15, 16, 23)
34+
(8, 15, 16, 42)
35+
(8, 15, 23, 42)
36+
(8, 16, 23, 42)
37+
(15, 16, 23, 42)
38+
```
39+
40+
作弊AC代码:
41+
42+
```
43+
class Solution(object):
44+
def combine(self, n, k):
45+
"""
46+
:type n: int
47+
:type k: int
48+
:rtype: List[List[int]]
49+
"""
50+
import itertools
51+
return [list(i) for i in itertools.combinations(range(1,n+1), k)]
52+
```
53+
54+
55+
思路二:
56+
57+
标准的recursion
58+
59+
但是会超时
60+
61+
62+
```
63+
class Solution(object):
64+
def combine(self, n, k):
65+
"""
66+
:type n: int
67+
:type k: int
68+
:rtype: List[List[int]]
69+
"""
70+
ans = []
71+
self.dfs(n, k, 1, [], ans)
72+
return ans
73+
74+
def dfs(self, n, k ,start, lst, ans):
75+
if k == 0 :
76+
ans.append(lst)
77+
return
78+
for i in range(start, n+1):
79+
self.dfs(n, k - 1, i + 1,lst +[i], ans)
80+
```
81+
82+
理解方式
83+
84+
```
85+
86+
1 2 3
87+
12 13 14 23 24 34
88+
```
89+
90+
可以参照这里
91+
92+
93+
<http://www.geeksforgeeks.org/print-all-possible-combinations-of-r-elements-in-a-given-array-of-size-n/>
94+
95+
96+
解法三:
97+
98+
99+
采用递归的方式,在n个数中选k个,如果n大于k,那么可以分类讨论,如果选了n,那么就是在1到(n-1)中选(k-1)个,否则就是在1到(n-1)中选k个。递归终止的条件是k为1,这时候1到n都符合要求。
100+
101+
注意一开始这里的else part花了我一点时间来理解,因为n必定大于k,所以这样递归当 n == k的时候选法就是code原作者的写法,也就是直接[range(1,k+1)]
102+
103+
参考这里: <https://shenjie1993.gitbooks.io/leetcode-python/content/077%20Combinations.html>
104+
105+
106+
```
107+
class Solution(object):
108+
def combine(self, n, k):
109+
"""
110+
:type n: int
111+
:type k: int
112+
:rtype: List[List[int]]
113+
"""
114+
if k == 1:
115+
return [[i + 1] for i in range(n)]
116+
result = []
117+
if n > k:
118+
result = [r + [n] for r in self.combine(n - 1, k - 1)] + self.combine(n - 1, k)
119+
else: #n == k
120+
# result = [r + [n] for r in self.combine(n - 1, k - 1)]
121+
result = [range(1,k+1)]
122+
return result
123+
```

0 commit comments

Comments
 (0)