Leetcode每日打卡:77. 组合(Python实现)

题目的内容如下

解答:这道题目一看就是入门级搜索题,十分简单,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,日常分享编程、算法等知识,大家一起学习。

猜你喜欢

转载自blog.csdn.net/update7/article/details/108487872