有乙個機械人的位於乙個 m × n 個網格左上角。
機械人每一時刻只能向下或者向右移動一步。機械人試圖達到網格的右下角。
問有多少條不同的路徑?
example 1:
input: n = 1, m = 3
output: 1
explanation: only one path to target position.
example 2:
input: n = 3, m = 3
output: 6
explanation:
d : down
r : right
1) ddrr
2) drdr
3) drrd
4) rrdd
5) rdrd
6) rddr
n和m均不超過100
且答案保證在32位整數可表示範圍內。
classsolution:
""" @param m: positive integer (1
<= m <= 100
) @param n: positive integer (
1<= n <= 100
) @return: an integer
"""def uniquepaths(self, m, n):
# write your code here
#求階乘
def jc(num):
res = 1
for i in range(1,num+1
): res=res*i
return
res
nums = jc(m-1)*jc(n-1
) all = jc(m+n-2
)
return all//
nums
思路:
m*n1*3 dd 1 2*1//2*1
3*3 ddrr 6 4*3*2*1//2*1//2*1
63*2 drrrrrrrrrrrrrrrrrr..... 63 63*62*61*...1//62*61*60*...1//1
1.首先可以根據m*n算出有多少種不同的拼接可能,比如3*3,ddrr,drdr,drrd,rrdd,rdrd等 >>不管怎麼樣到達終點時都是向右2 步,向下2步,所以有d,d,r,r共4個元素,
有4*3*2*1種拼接組合
2.最終有m+n-2的階乘種拼接組合,但是全部的拼接組合中存在重複的元素,所以需要分別除以m-1的階乘種拼接組合
和除以n-1的階乘種拼接組合,得到的就是最終的所有可能了
公式表達:
全部出現的可能:m+n-2的階乘
重複元素拼接組合的可能:m-1的階乘,n-1的階乘
最終可能:m+n-2的階乘//(m-1的階乘*n-1階乘)
lintCode 115 不同的路徑
問題描述 不同的路徑 的跟進問題 現在考慮網格中有障礙物,那樣將會有多少條不同的路徑?網格中的障礙和空位置分別用 1 和 0 來表示。如下所示在3x3的網格中有乙個障礙物 0,0,0 0,1,0 0,0,0 一共有2條不同的路徑從左上角到右下角。思路 由於部分格仔有障礙物,不能訪問到,需要對左上角和...
Lintcode 114 不同的路徑
有乙個機械人的位於乙個 m n 個網格左上角。機械人每一時刻只能向下或者向右移動一步。機械人試圖達到網格的右下角。問有多少條不同的路徑?class solution public param m positive integer 1 m 100 param n positive integer 1 ...
lintcode練習 115 不同的路徑 II
不同的路徑 的跟進問題 現在考慮網格中有障礙物,那樣將會有多少條不同的路徑?網格中的障礙和空位置分別用 1 和 0 來表示。如下所示在3x3的網格中有乙個障礙物 0,0,0 0,1,0 0,0,0 一共有2條不同的路徑從左上角到右下角。m 和 n 均不超過100 如注釋,動態規劃類的題,最主要的是思...