常用模板

一、組合(combination)

  • 遞歸版本
def recursion(nums,start,cur,res):
    # add some condition like len(cur) match some conditions
    res.append(cur[:])
    for i in range(start,len(nums)):
        cur.append(nums[i])
        recursion(nums,i+1,cur,res)
        cur.pop()
    return
  • dfs版本
def dfs(nums,start,cur,res):
    res.append(cur[:])
    for i in range(start,len(nums)):
        dfs(nums,i+1,cur+[nums[i]],res)
    return

二、排列(permutations)

  • 遞歸版本
def perm(nums,start,end,res):
    if start == end:
        res.append(nums[:])
        return res
    for i in range(start,end):
        nums[start],nums[i] = nums[i],nums[start] # 每個(gè)元素與第一個(gè)元素交換,使得總在處理后n-1個(gè)數(shù)的全排列
        perm(nums,start+1,end,res)
        nums[start],nums[i] = nums[i],nums[start] # 元素交換回來

三、dfs 模板 for matrix problem

dr = [[0,1],[0,-1],[1,0],[-1,0]] # four directions
def dfs(i,j,matrix,visited,row,col,dr):
    if visited[i][j]:
        # return or return values
    for d in dr:
        ni,nj = i+d[0],j+d[1]
        if x<0 or x>=m or y<0 or y>=n or other conditions: # conditions not valid
            continue
        visited[i][j] = True
        dfs(ni,nj,matrix,visited,row,col,dr)

四、bfs模板 for matrix problem

import Queue
dr = [[0,1],[0,-1],[1,0],[-1,0]] # four directions
def bfs(matrix,dr):
    que = Queue.Queue()
    que.put([i,j]) # [i,j]是遍歷的起點(diǎn),可以是很多個(gè)點(diǎn),視具體情況而定
    while not que.empty():
        i,j = que.get()
        for d in dr:
            ni,nj  = i+d[0],j+d[1]
            if x<0 or x>=m or y<0 or y>=n or other conditions: # conditions not valid
                continue
            if match some conditions:
                que.put([ni,nj])
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容