题解 | 三角形最小路径和

三角形最小路径和

https://www.nowcoder.com/practice/c9d44b73dc7c4dbfa4272224b1f9b42c

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param triangle int整型二维数组 
# @return int整型
#

"""
 minTrace1(self , triangle: List[List[int]]) -> int:
这段代码的问题在于它使用了一种 "贪心" 策略来选择路径,这在很多情况下会得到错误的结果。
具体来说,代码的逻辑是:在每一步都选择当前行中相邻的两个元素中较小的那个。但这种局部最优的选择并不能保证最终得到全局最优解。
举个例子,对于输入 [[2],[3,4],[6,5,7],[4,1,8,3]]:
按照这段代码的逻辑,会选择 2 → 3 → 5 → 1,总和为 11(恰好是正确答案)
但如果我们修改一下数据,比如 [[2],[3,100],[100,5,7],[4,1,8,3]]
代码会选择 2 → 3 → 5 → 1,总和为 11
但实际上最优路径是 2 → 100 → 7 → 3,总和为 112,显然不对
问题的核心在于:
贪心算法只考虑当前步骤的最优选择,而不考虑未来可能的更优路径
三角形路径问题需要考虑所有可能的路径,才能找到真正的最小和
正确的做法应该使用动态规划,如之前展示的自底向上的方法,或者自顶向下的方法记录每个位置的最小路径和。

"""
class Solution:
    def minTrace(self , triangle: List[List[int]]) -> int:
        dp=[ row[:] for row in triangle  ]
        n =len(triangle)
        dp[0][0]=triangle[0][0]
        for  i in range(1,n):
            for j in range(0,i+1):
                if j ==0 : 
                    # 只能从上到下
                    dp[i][j]+=dp[i-1][j]
                elif j ==i:# 最后一列
                    dp[i][j]+=dp[i-1][j-1]
                else: 
                    dp[i][j]+=min(dp[i-1][j-1],dp[i-1][j])
        return min(dp[-1])


    # 贪心错误解法
    def minTrace1(self , triangle: List[List[int]]) -> int:
       # write code here
       res=triangle[0][0]
       n =len(triangle)
       #print(n)
       j=0
       if n<2:
        return res 
       for i in range(1,n):
            #print("tr",i,triangle[i])
            if j+1<len(triangle[i]):
                if triangle[i][j]>=triangle[i][j+1]:
                    res+=triangle[i][j+1 ]
                    #print("i ",i,res)
                    j+=1
                else:
                    res+=triangle[i][j]
                    #print("i2  ",i,res)
            else:
                res+=triangle[i][j]
                #print("i3  ",i,triangle[i][j])
       return res 

"""
    dp [i][j] 表示  坐标为i ,j 时候的和
    dp[i][j]=+  max(dp[i+1][j+1],dp[i][j+1])

"""

#动态规划#
全部评论

相关推荐

点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务