题目的内容如下
解答:这道题目一看就是入门级搜索题,十分简单,DFS一遍即可。
DFS本来就是一个对栈的操作,也就是说你任意一个DFS理论上都是可以用栈来实现,只不过是代码的复杂程度不用罢了,以下代码也可以改写成完全用栈来实现的,有兴趣的同学可以去试试,应该也是不复杂的。本文为了简单起见,用了个递归+栈。
代码如下,有问题欢迎留言。
class Solution:
def dfs(self,pos,k,n):
# 参数解释:pos为当前遍历到的位置,k是还需要选择k个,n是总长度
for pos in range(pos,n-k+1):
self.vis.append(pos+1)
if k-1 == 0:
self.ret.append(self.vis[:])
self.vis.pop()
continue
self.dfs(pos+1,k-1,n)
self.vis.pop()
def combine(self, n: int, k: int) -> List[List[int]]:
#简单题,深度优先搜索即可
self.ret = []
self.vis = []#用个list来模拟栈的操作
for i in range(n-k+1):
self.vis.append(i+1) # 进栈
# 对只需要选择一个的特殊情况进行判断
if k==1:
self.ret.append(self.vis[:])
self.vis.pop() # 出栈
continue
self.dfs(i+1,k-1,n)
self.vis.pop() # 出栈
return self.ret
公众号:AIMarker,日常分享编程、算法等知识,大家一起学习。