首先,我们知道这个题用到的是递归的加回溯的一个思想。我们就要意识到这道题最关键的地方就是它不停的在压栈 因为我们知道递归的本质就是相当于栈的存储结构, 当我们在调用方法的时候,随着不停的循环,就相当于是不停的往里头压栈。当我第一个方法执行完之后,我进入第二个方法。在第二个方法完之后,就相当于回到了第一个方法的执行处,然后执行下面的方法。就是递归的一个思想,以及他的一个难点。 随着你不停的递归,当你进入这个方法。再到之后这个方法结束了,就相当于回到上个方法的执行处再继续接着下面的方法执行。就会执行pop()方法
python解法:
import time
class Sloution:
def combine(self,n,k):
result=[]
path=[]
a=time.time()
def backtracking(n,k,index):
if (len(path) == k):
result.append(path[:])
return
for i in range(index,n+1):
path.append(i)
backtracking(n,k,i+1)
path.pop()
backtracking(n,k,1)
return result
c=Sloution()
print(c.combine(5, 2))