Python获取最小路径,查找元素在list中的坐标

这篇文章主要展示了两个Python函数的实现:minPathSum用于计算给定二维网格的最小路径和,searchRange用于在排序数组中查找目标元素的第一个和最后一个位置。代码中涉及二维数组初始化、动态规划以及遍历数组的技巧。
摘要由CSDN通过智能技术生成

# coding=utf-8

__author__ = 'Jeff.xie'

def t(li):

pass

获取最小路径

def minPathSum(grid):

if not grid:

return 0

m= len(grid) #m列

n =len(grid[0]) #n行

print(grid[0])

print("m: ",m)

print("n: ",n)

#创建一个二维数组

dp = [[0]*n for _ in range(m)]

print(dp) #这是一个所有值为0的二维数组

dp[0][0] = grid[0][0]#初始化左上角

#初始化第一列,最小和只能从上面到达,且需要加上当前格子的元素值

for i in range(1,m):

dp[i][0] = dp[i-1][0]+grid[i][0]#每一行的第一个元素,得到结果,并且是从原始数据的每一行第一个数据一次累加

print(dp)

#初始化第一行,最小和只能从左边到达,且需要加加上当前格子元素的最小值

for i in range(1,n):

dp[0][i] = dp[0][i-1] + grid[0][i]

print(dp)

#遍历其他地方的格子,路径只能从相邻左方和相邻上方到达,然后比较两者中最小的元素值加上当前网格的值

for i in range(1,m):

for j in range(1,n):

dp[i][j] = min(dp[i-1][j],dp[i][j-1])+grid[i][j] #判断是上边dp[i-1][j]的数据小,还是左边dp[i][j-1]的数据小

print(dp)

return dp[-1][-1]

查找元素在list中的坐标

def searchRange( nums, target):

#在排序数组中查找元素的第一个和最后一个位置

left = -1

right = -1

for i in range(len(nums)):

if nums[i] == target:

left = i

break

if left != -1:

for i in range(left, len(nums)):

if nums[i] == target:

right = i

return [left, right]

def t5(grid):

#获取行和列

row=len(grid)

column = len(grid[0])

print(column)

#初始化一个全部值为0,但是行列都相同的li

li = [[0]*column for i in range(row)] #总共有len(row)行,每一行都是一个list,每个list的元素都赋值为0

print(li)

#初始化左上角

li[0][0]= grid[0][0]

#初始化第一列

for i in range(1,row):

li[i][0]=li[i-1][0]+grid[i][0]

print(li)

#初始化第一行

for i in range(1,column):

li[0][i]= li[0][i-1]+grid[0][i]

print(li)

#填充其他单元格

for i in range(1,row):

for j in range(1,column):

x= min(li[i-1][j],li[i][j-1])

li[i][j]= x+grid[i][j]

print(li)

#最后一个数字就是最小路径

return li[-1][-1]

if __name__ == '__main__':

grid = [[1,3,1],[1,5,1],[4,2,1],[2,3,4]]

# r= minPathSum(grid)

# print(r)

# r= t2(grid)

# print(r)

r3=t3(grid)

print("r3:",r3)

li=[1,2,3,4,5,5,6,7]

r=searchRange(li,6)

print(r)

t5(grid)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值