Algorithms—62.Unique Paths

思路:m*n个方块,只能向右或者下,可以理解成有(m-1)个向右的动作和(n-1)个向下的动作,找到所有的可能性,这个问题又等价于依次排列的m(确定是m没有打错)个箱子,有(n-1)个小球随意的放置,求可能性。本来使用的是List<List<Integer>>数组求最后的size,这个list中的每个list即是一种可能性,产生的方式为,每个表示可能性的list中查看其最后一个值,然后添加从其最后一个值到m个 新list进总list中,删除原来的list,直到每个list的长度都为n-1,即小球被分发完毕,但是后来发现该方法超时,于是更换成map

public class Solution {
    public int uniquePaths(int m, int n) {
    	if (m==1||n==1) {
			return 1;
		}
    	Map<Integer,Integer> map=new HashMap<Integer, Integer>();
    	for (int i = 0; i < m; i++) {
			map.put(i, 1);
		}
    	for (int i = 1; i < n-1; i++) {
    		int sum=0;
			for (int j = m-1; j >=0; j--) {
				sum+=map.get(j);
			}
			int k=map.get(m-1);
			for (int j = m-1; j >=0; j--) {
				map.put(j, sum);
				sum-=k;
				if (j>1) {
					k=map.get(j-1);
				}
			}
		}
    	int sum=0;
    	for (int i = 0; i < m; i++) {
			sum+=map.get(i);
		}
    	return sum;
    }
}


 

耗时:240ms,下游水准。悲剧的是看了一下63题,感觉我这个思路完全用不上。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值