62. Unique Paths

题目描述:

A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below).

The robot can only move either down or right at any point in time. The robot is trying to reach the bottom-right corner of the grid (marked 'Finish' in the diagram below).

How many possible unique paths are there?


Above is a 3 x 7 grid. How many possible unique paths are there?

Note: m and n will be at most 100.

我的思路:

        一个机器人在网格的左上角,想要走到右下角,并且只能向右或者下走,求一共有多少种不同的路径。

        每个位置的路径由它上方和左方位置的路径数的加和。自己写了一个递归的。。。好蠢。慢的不是一星半点。

        换个思路都换成1的矩阵做加法就可以了。

我的代码:

class Solution:
    def uniquePaths(self, m, n):
        if m == 1 or n == 1:
            return 1
        return self.uniquePaths(m, n - 1) + self.uniquePaths(m - 1, n)
class Solution:
    def uniquePaths(self, m, n):
        rel = [[1 for _ in range(n)] for _ in range(m)]
        for i in range(1, m):
            for j in range(1, n):
                rel[i][j] = rel[i-1][j] + rel[i][j-1]  
        return rel[-1][-1]

Discuss:

def uniquePaths1(self, m, n):
    if not m or not n:
        return 0
    return math.factorial(m+n-2)/(math.factorial(n-1) * math.factorial(m-1))

数学方法计算好,直接用公式返回值,不推荐。

def uniquePaths(self, m, n):
    if not m or not n:
        return 0
    cur = [1] * n
    for i in xrange(1, m):
        for j in xrange(1, n):
            cur[j] += cur[j-1]
    return cur[-1]

这个想法很好,很大程度上降低了空间复杂度。

学到:

  1. 难得写出一次递归的代码,哈哈,但是这个东西不能乱用啊,复杂度是个问题。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值