回溯算法491|46|47

491非递减子序列

class Solution:
    def __init__(self):
        self.path = []
        self.result = []

    def findSubsequences(self, nums: List[int]) -> List[List[int]]:
        self.backTracking(nums, 0)
        return self.result

    def backTracking(self, nums, start_index) -> List:
        if len(self.path) >= 2:
            self.result.append(self.path[:])
        used = set()
        for i in range(start_index, len(nums)):
            if nums[i] not in used:
                if len(self.path) == 0 or nums[i] >= self.path[-1]:
                    self.path.append(nums[i])
                    used.add(nums[i])
                    self.backTracking(nums, i + 1)
                    self.path.pop()
            else:
                continue
            

46全排列

class Solution:
    def __init__(self):
        self.path = []
        self.result = []
        
    def permute(self, nums: List[int]) -> List[List[int]]:
        used = [0] * len(nums)
        self.backTracking(nums, used)
        return self.result

    def backTracking(self, nums, used):
        if len(self.path) == len(nums):
            self.result.append(self.path[:])
        for i in range(len(nums)):
            if used[i] == 1:
                continue
            
            self.path.append(nums[i])
            used[i] = 1
            self.backTracking(nums, used)
            self.path.pop()
            used[i] = 0

47全排列II

class Solution:
    def __init__(self):
        self.path = []
        self.result = []

    def permuteUnique(self, nums: List[int]) -> List[List[int]]:
        nums.sort()
        used = [0] * len(nums)
        self.backTracking(nums, used)
        return self.result

    def backTracking(self, nums, used) -> List:
        if len(self.path) == len(nums):
            self.result.append(self.path[:])

        for i in range(len(nums)):
            if i > 0 and nums[i] == nums[i - 1] and used[i - 1] == 0:
                continue
            if used[i] == 0:
                self.path.append(nums[i])
                used[i] = 1
                self.backTracking(nums, used)
                self.path.pop()
                used[i] = 0

全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务