46.全排列

  1. class Solution:
  2. def permute(self, nums: List[int]) -> List[List[int]]:
  3. def dfs(path,j):
  4. if(j==len(nums)):
  5. ans.append(path[:]) # 如果有pop语句的话,就必须加上[:],这是为什么呢
  6. return
  7. for i in range(len(nums)):
  8. if nums[i] not in path:
  9. path.append(nums[i])
  10. dfs(path,j+1)
  11. path.pop(-1)
  12. ans=[]
  13. dfs([],0)
  14. # print(ans)
  15. return ans

417.太平洋大西洋

  1. class Solution:
  2. def pacificAtlantic(self, heights: List[List[int]]) -> List[List[int]]:
  3. def dfs(x,y,point):
  4. point.append((x,y))
  5. direction = [[-1,0],[1,0],[0,1],[0,-1]]
  6. for d in direction:
  7. nx=x+d[0]
  8. ny=y+d[1]
  9. if nx>=0 and ny>=0 and nx<len(heights) and ny<len(heights[0]) and heights[nx][ny]>=heights[x][y] and (nx,ny) not in point:
  10. dfs(nx,ny,point)
  11. point=[]
  12. for i in range (len(heights[0])):
  13. dfs(0,i,point)
  14. for i in range (len(heights)):
  15. dfs(i,0,point)
  16. print(point)
  17. point2=[]
  18. for i in range (len(heights[0])):
  19. dfs(len(heights)-1,i,point2)
  20. for i in range (len(heights)):
  21. dfs(i,len(heights[0])-1,point2)
  22. print(point2)
  23. print(set(point2) & set(point))
  24. return list(set(point2) & set(point))

为什么每次point都重新开始遍历
image.png