代码随想录算法训练营第24天|93. 复原 IP 地址、78.子集、90.子集II

93. 复原 IP 地址

leetcode 93. 复原 IP 地址
代码随想录

class Solution:
    def isValid(self,s):
        # print(s)
        # 以零开头
        if len(s)>1 and s[:1] == "0":
            return False
        # 大于255
        if int(s)>255:
            return False
        return True
    def backtracking(self, s, startIndex, res, path):
        if startIndex == len(s) and len(path) == 4:
            res.append(".".join(path))
            return
        if len(path) >= 4:
            return
        for i in range(startIndex, len(s)):
            if self.isValid(s[startIndex:i+1]):
                path.append(s[startIndex:i+1])
                self.backtracking(s, i+1, res, path)
                path.pop()
    def restoreIpAddresses(self, s: str) -> List[str]:
        res = []
        self.backtracking(s,0,res,[])
        return res

78.子集

leetcode 78.子集
代码随想录

class Solution:
    def backtracking(self, nums, path, res,startIndex):
        res.append(path[:])
        if startIndex >= len(nums):
            return
        for i in range(startIndex,len(nums)):
            path.append(nums[i])
            self.backtracking(nums, path,res, i+1)
            path.pop()
    def subsets(self, nums: List[int]) -> List[List[int]]:
        res = []
        self.backtracking(nums,[], res,0)
        return res

90.子集II

leetcode 90.子集II
代码随想录

同一层不能有重复的做法,used数组再次出现。

class Solution:
    def backtracking(self, nums, path, res, startIndex, used):
        res.append(path[:])
        if startIndex >= len(nums):
            return
        for i in range(startIndex, len(nums)):
            if i > startIndex and nums[i] == nums[i-1] and not used[i-1]:
                continue
            path.append(nums[i])
            used[i] == True
            self.backtracking(nums,path,res,i+1,used)
            used[i] == False
            path.pop()
        
    def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:
        nums.sort()
        res = [ ]  
        used = [False] * len(nums)
        self.backtracking(nums,[],res, 0, used)
        return res
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值