Python:每日一题 391
本帖最后由 永恒的蓝色梦想 于 2020-5-13 16:09 编辑今天的题目:
编写函数,输入一个矩阵(类型为 List]),在只允许向右和向下移动的情况下,输出从左上角到右下角的最小路径和。示例:
输入:
[
[131,673,234,103,18],
[201,96,342,965,150],
746,422,111],
121,956],
37,331]
]
输出:2427
解释:标红路径即为最短路径
{:10_298:}欢迎大家一起答题!{:10_298:} 本帖最后由 永恒的蓝色梦想 于 2020-5-13 16:03 编辑
二楼{:10_256:}
参考答案:(结贴后放出)def shortestWay(matrix):
for i in range(len(matrix)):
for j in range(len(matrix)):
if i and j:
matrix+=min(matrix,matrix)
elif i:
matrix+=matrix
elif j:
matrix+=matrix
return matrix[-1][-1] 嗯,你应该设置个只允许作者查看的选项,不然别人解答就都漏出去所有人都能看到了。 heidern0612 发表于 2020-5-12 20:39
嗯,你应该设置个只允许作者查看的选项,不然别人解答就都漏出去所有人都能看到了。
OK class Solution:
def minPathSum(self, grid):
m,n=len(grid),len(grid)
for _ in range(1,n):grid+=grid#第一行的路径和
for _ in range(1,m):grid+=grid#第一列的路径和
for i in range(1,n):
for j in range(1,m):
grid+=min(grid,grid) #然后分别一列一列的求出最短路径和
return grid #最后一个就是求出的最小路径和
if __name__ == "__main__":
obj = Solution()
s=[
,
,
,
,
]
print(obj.minPathSum(s))
def daily391(grid: list) -> int:
if not grid:
return 0
row, column = len(grid), len(grid)
dp = [ * column for _ in range(row)]
dp = grid
for i in range(1, column):
dp = grid + dp
for i in range(1, row):
dp = grid + dp
for j in range(1, column):
dp = min(dp, dp) + grid
pprint(dp)
return dp[-1][-1]
感觉是不是可以用一维列表就足够了 def shortest_path(matrix):
dp = [];
for i in range(0, len(matrix)):
line = [];
for j in range(0,len(matrix)):
line.append(0);
dp.append(line);
dp = matrix;
for i in range(1, len(matrix)):
dp = dp + matrix
for i in range(1,len(matrix)):
dp = dp + matrix
for i in range(1, len(matrix)):
for j in range(1, len(matrix)):
if dp < dp:
dp = dp + matrix;
else:
dp = dp + matrix;
return dp)-1]; 本帖最后由 kinkon 于 2020-5-12 22:49 编辑
动态规则
def f391(List):
if not List or not List:
return 0
m, n = len(List), len(List)
for i in range(m):
for j in range(n):
if i == 0 and j == 0:
continue
elif i == 0 and j > 0:
List += List
elif i > 0 and j == 0:
List += List
else:
List += min(List, List)
#print(List)
return List[-1][-1] def daily391_0(grid: list) -> int:
if not grid:
return 0
row, column = len(grid), len(grid)
steps = [:i]) for i in range(1, column + 1)]
for i in range(1, row):
steps += grid
for j in range(1, column):
steps = min(steps, steps) + grid
return steps[-1]
用一维列表保存 def f391(M):
for i in range(len(M)):
for j in range(len(M)):
if i and j:
M+=min(M,M)
elif i:
M+=M
elif j:
M+=M
return M[-1][-1]
这种题涉及的是算法么? 本帖最后由 liuzhengyuan 于 2020-5-13 11:02 编辑
这道题能用贪心解吗?
我打算用动态规划…… def f(list1):
list2 = []
for index in range(0,len(list1)):
list2.append())])
list2 = list1
for n in range(1,len(list2)):
list2 = list2 + list1
for n in range(1,len(list2)):
list2 = list2 + list1
for m in range(1,len(list1)):
for n in range(1,len(list1)):
list2 = min(list2,list2) + list1
return list2[-1][-1]好像做过这个题目 有答案吗
rsj0315 发表于 2020-5-12 22:42
这种题涉及的是算法么?
矩阵操作 这涉及到了我不太擅长的方面(矩阵)
在 leetcode 会含泪跳过{:10_266:} _2_ 发表于 2020-5-13 16:35
这涉及到了我不太擅长的方面(矩阵)
在 leetcode 会含泪跳过
其实就是二维数组 永恒的蓝色梦想 发表于 2020-5-13 16:38
其实就是二维数组
……
A LeetCode a day keeps confidence away. def f391(ls):
for i in range(len(ls)):
for j in range(len(ls)):
if i!=0 and j==0:
ls+=ls
if j!=0 and i==0:
ls+=ls
if i!=0 and j!=0:
ls+=min(ls,ls)
return ls[-1][-1] {:5_91:}
页:
[1]
2