一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。
问总共有多少条不同的路径?
输入: m = 3, n = 2 输出: 3 解释: 从左上角开始,总共有 3 条路径可以到达右下角。 1. 向右 -> 向右 -> 向下 2. 向右 -> 向下 -> 向右 3. 向下 -> 向右 -> 向右
输入: m = 7, n = 3 输出: 28
1 <= m, n <= 100
- 题目数据保证答案小于等于
2 * 10 ^ 9
impl Solution {
pub fn unique_paths(m: i32, n: i32) -> i32 {
let m = m as usize;
let n = n as usize;
let mut dp = vec![vec![0; n]; m];
dp[m - 1][n - 1] = 1;
for i in (0..m).rev() {
for j in (0..n).rev() {
if i < m - 1 {
dp[i][j] += dp[i + 1][j];
}
if j < n - 1 {
dp[i][j] += dp[i][j + 1];
}
}
}
dp[0][0]
}
}
impl Solution {
pub fn unique_paths(m: i32, n: i32) -> i32 {
(1..(m as i64)).fold(1, |acc, x| acc * (n as i64 - 1 + x) / x) as i32
}
}