Fork me on GitHub

【python刷题】分治法

归并排序

def merge(le, ri):
    res = []
    i = j = 0
    while i < len(le) and j < len(ri):
        if le[i] < ri[j]:
            res.append(le[i])
            i += 1
        else:
            res.append(ri[j])
            j += 1
    res = res + le[i:] + ri[j:]
    return res

def mergeSort(nums):
    if len(nums) <= 1:
        return nums
    mid = len(nums) // 2
    left = mergeSort(nums[:mid])
    right = mergeSort(nums[mid:])
    res = merge(left, right)
    return res

nums = [6,2,1,5,4,3,2,2,7]
res = mergeSort(nums)
print(res)

leetcode 241 为运算表达式设计优先级

class Solution:
    def diffWaysToCompute(self, input: str) -> List[int]:
        res = []
        n = len(input)
        for i in range(n):
            c = input[i]
            if c == '+' or c == '-' or c == '*':
                left = self.diffWaysToCompute(input[:i])
                right = self.diffWaysToCompute(input[i+1:])
                for a in left:
                    for b in right:
                        if c == '+':
                            res.append(a + b)
                        elif c == '-':
                            res.append(a - b)
                        elif c == '*':
                            res.append(a * b)
        if len(res) == 0:
            res.append(int(input))
        return res
posted @ 2021-02-05 10:35  西西嘛呦  阅读(126)  评论(0编辑  收藏  举报