算法 day29 回溯5

491 非递减子序列

给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。

数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。
在这里插入图片描述

def backtracking(nums,startIndex,path,result):
	if startIndex>=len(nums):
		return  # if这一部分不写也可以
	if len(path)>1:
		result.append(path[:]) 
	uset=set() #每一层去重
	for i in range(startIndex,len(nums)):
		if (path and nums[i]<path[-1]) or nums[i] in uset:
			continue
		uset.add(nums[i])
		path.append(nums[i])
		backtracking(nums,i+1,path,result)
		path.pop()
def findSubseq(nums):
	result=[] #path可以不写,result一定要写,在别的函数内的result,当前函数不认,只能在当前函数中赋值将其带入到其他函数中
	backtracking(nums,0,[],result)	
	return result

  • 细品倒数第二行
def func1(index,end,b=[]):
	for i in range(index,end):
 		b.append(i)
   
def func2():
    b=[]
    func1(3,5,[])  #a(3,5,b)
    return b

46 全排列

给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
在这里插入图片描述

def backtracking(nums,path,used,result):
	if len(path)==len(nums):
		result.append(path[:])
		return
	for i in range(len(nums)):
		if used[i]:
			continue
			
		used[i]=True
		path.append(nums[i])
		backtracking(nums,path,used,result)
		path.pop()
		used[i]=False
def permute(nums):
	result=[]
	used=[False]*len(nums)
	backtracking(nums,[],used,result)
	return result 

47 全排列II

给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。
在这里插入图片描述

def backtracking(nums,path,used,result):
	if len(path)==len(nums):
		result.append(path[:])
		return
	for i in range(len(nums)):
		if (i>0 and nums[i]==nums[i-1] and not used[i-1]) or used[i]: #not used[i-1]==False是对当前层去重,used[i-1]==True是对下一层去重
		# or 前面的条件是对横向的判断去重 后面的条件是对纵向的判断去重
			continue
		used[i]=True
		path.append(nums[i])
		backtracking(nums,path,used,result)
		path.pop()
		used[i]=False

相关推荐

  1. 算法训练营day25(补),回溯5

    2024-04-05 23:50:01       55 阅读
  2. 算法训练营Day29(回溯

    2024-04-05 23:50:01       61 阅读
  3. Day 24 回溯算法 1

    2024-04-05 23:50:01       61 阅读
  4. Day 24 回溯算法01

    2024-04-05 23:50:01       36 阅读
  5. Day 29 回溯05

    2024-04-05 23:50:01       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-05 23:50:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-05 23:50:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-05 23:50:01       82 阅读
  4. Python语言-面向对象

    2024-04-05 23:50:01       91 阅读

热门阅读

  1. Hutool实现用户密码加盐(Salt)工具类

    2024-04-05 23:50:01       31 阅读
  2. 使用Bootstrap Table实现无刷新分页

    2024-04-05 23:50:01       31 阅读
  3. 动态规划 Leetcode 516 最长回文子序列

    2024-04-05 23:50:01       30 阅读
  4. 多层感知机与DNN算法

    2024-04-05 23:50:01       31 阅读
  5. 贪心之跳跃

    2024-04-05 23:50:01       27 阅读
  6. postcss安装和使用

    2024-04-05 23:50:01       40 阅读
  7. 六、c++代码中的安全风险-fopen

    2024-04-05 23:50:01       36 阅读