力扣刷题 day42:10-12

1.最大正方形

在一个由 '0' 和 '1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积。力扣刷题 day42:10-12_第1张图片

方法一:动态规划 

#方法一:动态规划
def maximalSquar(matrix):
    dp=[[0]*(len(matrix[0])+1) for i in range(len(matrix)+1)] #dp[i][j] 表示以该位置为右下角的能构成的最大正方形
    res=0
    for i in range(len(matrix)):
        for j in range(len(matrix[i])):
            if matrix[i][j]=='1':
                dp[i][j]=min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1])+1 #状态转移方程,求可能的最大边长,要考虑限制条件
            res=max(res,dp[i][j])
    return res*res

2.为运算表达式设计优先级 

给你一个由数字和运算符组成的字符串 expression ,按不同优先级组合数字和运算符,计算并返回所有可能组合的结果。你可以 按任意顺序 返回答案。

生成的测试用例满足其对应输出值符合 32 位整数范围,不同结果的数量不超过 104 。力扣刷题 day42:10-12_第2张图片

方法一:递归+分冶 

#方法一:递归+分冶
def diffWaysToCompute(expression):
    if expression.isdigit():
        return [int(expression)] #是数字则返回数字
    res=[] #保存结果
    for i in range(len(expression)):
        if expression[i] in ['+','-','*']: 
            left=diffWaysToCompute(expression[:i]) #递归,分成左右两边求解两边可能的结果
            right = diffWaysToCompute(expression[i + 1: ])
            for l in left:
                for r in right:
                    if expression[i]=='+':
                        res.append(l+r)
                    elif expression[i]=='-':
                        res.append(l-r)
                    elif expression[i]=='*':
                        res.append(l*r) #两边可能的组合
    return res

3.丑数 II 

给你一个整数 n ,请你找出并返回第 n 个 丑数 。

丑数 就是只包含质因数 2、3 和/或 5 的正整数。力扣刷题 day42:10-12_第3张图片

方法一:三指针 

#方法一:三指针
def nthUglyNumber(n):
    res,a,b,c=[1 for i in range(n)],0,0,0
    for i in range(1,n):
        x1,x2,x3=res[a]*2,res[b]*3,res[c]*5  #等于前面的丑数*2/3/5
        res[i]=min(x1,x2,x3)      #当前位置的丑数比前一个丑数大的最小的丑数
        if res[i]==x1:
            a+=1    #指针移动,避免重复
        if res[i]==x2:
            b += 1
        if res[i]==x3:
            c+=1
    return res[-1]

你可能感兴趣的:(力扣刷题,算法)