Leetcode-D14-64. 最小路径和&221. 最大正方形

64. 最小路径和

1、这题也是二维矩阵的,思路和昨天的差不多。
2、代码如下

class Solution:
    def minPathSum(self, grid: List[List[int]]) -> int:
        m = len(grid)
        n = len(grid[0])
        # 讨论m=1 or n=1
        if m==1:
            return sum(grid[0])
        if n==1:
            sum_n = 0
            for i in grid:
                sum_n +=i[0]
            return sum_n
        #初始化左列和上列
        old_row = [0]*(n)
        left = [0]*(m)
        new_row = [0]*n
        old_row[0]= grid[0][0]
        left[0] = grid[0][0]
        for i in range(1,n):
            old_row[i] = old_row[i-1]+grid[0][i]
        for j in range(1,m):
            left[j] = left[j-1] + grid[j][0]
        #逐行逐步递归
        for i in range(1,m):
            left_val = left[i]
            for j in range(1,n):
                new_row[j]=min(old_row[j],left_val)+grid[i][j]
                left_val = new_row[j]
            old_row = new_row[:]
        return new_row[-1]

3、效果还不错
Leetcode-D14-64. 最小路径和&221. 最大正方形_第1张图片

221. 最大正方形

1、这题一眼看过去,没有什么思路
2、看了答案,大概懂了,这种递归的思想还要加强——以某单元格为正方形的右下角,记录最大的正方形长度。
Leetcode-D14-64. 最小路径和&221. 最大正方形_第2张图片
3、补一行和一列的思想之前做过,为了处理原始数据的第一行和第一列。Leetcode-D14-64. 最小路径和&221. 最大正方形_第3张图片
4、这里要注意,他的字段类型是str,判断的时候不要当成int
5、如果本身不为1,那么以这个单元格为右下角的正方形大小就为0
6、我这里一直在算的是最长边的大小,最后要求面积,所以需要平方一下

class Solution:
    def maximalSquare(self, matrix: List[List[str]]) -> int:
        m = len(matrix)
        n = len(matrix[0])
        if m==1:
            if '1' in matrix[0]:
                return 1
            else:
                return 0
        if n==1:
            for i in matrix:
                if '1' in i:
                    return 1
            return 0
        dp = [[0]*(n+1) for i in range(m+1)]

        for i in range(1,m+1):
            for j in range(1,n+1):
                if matrix[i-1][j-1]=='1':
                    dp[i][j]=min(dp[i-1][j],dp[i][j-1],dp[i-1][j-1])+1
                else:
                    dp[i][j]=0
        max_val = 0
        for i in range(m+1):
            max_row = max(dp[i])
            if max_row>max_val:
                max_val = max_row

        return max_val*max_val

Leetcode-D14-64. 最小路径和&221. 最大正方形_第4张图片

你可能感兴趣的:(动态规划,leetcode,算法,职场和发展)