8.14笔记

46. 全排列

class Solution(object):
    def permute(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        res = []
        self.dfs(nums,[],res)
        return res
    def dfs(self,nums,path,res):
        if len(nums) == 0:
            res.append(path)
        for i in range(len(nums)):
            self.dfs(nums[:i]+nums[i+1:],path+[nums[i]],res)

47. 全排列 II(在全排列的基础上先对数组进行排序,递归时如果出现重复数字则略过)

class Solution(object):
    def permuteUnique(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        res = []
        nums.sort()
        self.dfs(nums,[],res)
        return res
    def dfs(self,nums,path,res):
        if len(nums) == 0:
            res.append(path)
        for i in range(len(nums)):
            if i > 0 and nums[i] == nums[i-1]:
                continue
            else:
                self.dfs(nums[:i]+nums[i+1:],path+[nums[i]],res)

25. K 个一组翻转链表(第一种:栈的方式)

class Solution(object):
    def reverseKGroup(self, head, k):
        """
        :type head: ListNode
        :type k: int
        :rtype: ListNode
        """
        res = ListNode(0)
        p = res
        while True:
            count = k
            tep = head
            stack = []
            while count and tep:
                stack.append(tep)
                tep = tep.next
                count -= 1
            if count:
                p.next = head
                break
            while stack:
                p.next = stack.pop()
                p = p.next
            p.next = tep
            head = tep
        return res.next

第二种:递归方法

class Solution(object):
    def reverseKGroup(self, head, k):
        """
        :type head: ListNode
        :type k: int
        :rtype: ListNode
        """
        cur = head
        count = 0
        while cur and count!=k:
            cur = cur.next
            count += 1
        if count == k:
            cur = self.reverseKGroup(cur,k)
            while count:
                head.next,cur,head = cur,head,head.next
                count -= 1
            head = cur
        return head

42. 接雨水

class Solution(object):
    def trap(self, height):
        """
        :type height: List[int]
        :rtype: int
        """
        if len(height) < 3:
            return 0
        left,right = 0,len(height)-1
        res = 0
        l_max,r_max = height[left],height[right]
        while left < right:
            l_max = max(l_max,height[left])
            r_max = max(r_max,height[right])
            if l_max <= r_max:
                res += l_max - height[left]
                left += 1
            else:
                res += r_max - height[right]
                right -= 1
        return res

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值