当前位置: 首页> 科技> 能源 > 代码随想录算法训练营day31 | 491.递增子序列、46.全排列、47.全排列 II

代码随想录算法训练营day31 | 491.递增子序列、46.全排列、47.全排列 II

时间:2025/7/12 15:01:23来源:https://blog.csdn.net/sunflowers11/article/details/139232039 浏览次数:2次

491.递增子序列

未去重的代码

class Solution:def findSubsequences(self, nums: List[int]) -> List[List[int]]:result = []self.backtracking(nums, result, [], 0)return resultdef backtracking(self, nums, result, path, startIndex):if len(path) >= 2:result.append(path[:])for i in range(startIndex, len(nums)):if len(path) >= 1 and nums[i] < path[-1]:continuepath.append(nums[i])self.backtracking(nums, result, path, i+1)path.pop()

本题是树结构的同一层剪枝

但是本题不能排序,和之前的剪枝差别很大

class Solution:def findSubsequences(self, nums: List[int]) -> List[List[int]]:result = []self.backtracking(nums, result, [], 0)return resultdef backtracking(self, nums, result, path, startIndex):if len(path) >= 2:result.append(path[:])used = set()for i in range(startIndex, len(nums)):if len(path) >= 1 and nums[i] < path[-1]:continueif nums[i] in used:continueused.add(nums[i])path.append(nums[i])self.backtracking(nums, result, path, i+1)path.pop()

优化点:因为给定的数字范围是-100 <= nums[i] <= 100,因此set可以优化为数组

46.全排列

class Solution:def permute(self, nums: List[int]) -> List[List[int]]:result = []used = [False] * len(nums)self.backtracking(nums, result, [], used)return resultdef backtracking(self, nums, result, path, used):if len(path) == len(nums):result.append(path[:])returnfor i in range(len(nums)):if used[i]:continuepath.append(nums[i])used[i] = Trueself.backtracking(nums, result, path, used)path.pop()used[i] = False

47.全排列 II

去重的思路需要继续理解

class Solution:def permuteUnique(self, nums: List[int]) -> List[List[int]]:result = []used = [False] * len(nums)nums.sort()self.backtracking(nums, result, [], used)return resultdef backtracking(self, nums, result, path, used):if len(path) == len(nums):result.append(path[:])returnfor i in range(len(nums)):if used[i]:continueif i > 0 and nums[i] == nums[i-1] and not used[i-1]:continuepath.append(nums[i])used[i] = Trueself.backtracking(nums, result, path, used)path.pop()used[i] = False

关键字:代码随想录算法训练营day31 | 491.递增子序列、46.全排列、47.全排列 II

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: