Algorithms-64.Minimum Path Sum

思路:动态规划。f(x,y)=(x,y)+Min(f(x+1,y),f(x,y+1)),只是用这个递归会导致Time Limit Exceeded,再递归查询的同时建立一个hashmap,存储查询过的f(x,y),避免重复查询。

public class Solution {
    public int minPathSum(int[][] grid) {
    	int xl=grid.length;
    	int yl=grid[0].length;
    	Map<String, Integer> map=new HashMap<String, Integer>();
    	return f(grid,0,0,xl,yl,map);
    }
    public int f(int[][] grid,int x,int y,int xl,int yl,Map<String, Integer> map){
    	String coordinate=x+","+y;
    	if (map.get(coordinate)==null) {
			if (x>=xl||y>=yl) {
				return -1;
			}else {
				int xv=f(grid,x+1,y,xl,yl,map);
				int yv=f(grid,x,y+1,xl,yl,map);
			   int v=0;
			   if (xv<0) {
					v=yv;
				}else if (yv<0) {
					v=xv;
				}else if (xv>yv){
					v=yv;
				}else {
					v=xv;
				}
				int value=grid[x][y]+(v<0?0:v);
				map.put(coordinate, value);
				return value;
			}
		}
    	return map.get(coordinate);
    }
}


耗时:440ms,下游。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值