当前位置:实例文章 » 其他实例» [文章]算法leetcode|62. 不同路径(rust重拳出击)

算法leetcode|62. 不同路径(rust重拳出击)

发布人:shili8 发布时间:2025-01-04 15:04 阅读次数:0

**不同路径**

给定一个 `m x n` 的网格,且每个格子都可以看作是一个房间。从左上角开始,每一步只能向右或向下移动一步。请问有多少条不同的路径?

**示例1:**
输入:`numRows =3, numColumns =7`
输出:`28`

**示例2:**
输入:`numRows =3, numColumns =2`
输出:`3`

**示例3:**
输入:`numRows =7, numColumns =3`
输出:`28`

**解决方案**

这个问题可以使用动态规划来解决。我们可以创建一个 `dp` 数组,用于存储从左上角到每个格子的不同路径的数量。

rustfn unique_paths(m: i32, n: i32) -> i32 {
 let mut dp = vec![vec![0; n as usize]; m as usize];

 // 初始化第一行和第一列 for i in0..m as usize {
 dp[i][0] =1;
 }
 for j in0..n as usize {
 dp[0][j] =1;
 }

 // 填充dp数组 for i in1..m as usize {
 for j in1..n as usize {
 dp[i][j] = dp[i -1][j] + dp[i][j -1];
 }
 }

 return dp[m as usize -1][n as usize -1];
}


**解释**

我们首先初始化 `dp` 数组,第一行和第一列都设置为1,因为从左上角到每个格子只有一个路径。

然后,我们填充 `dp` 数组。对于每个格子 `(i, j)`,其值等于从左上角到 `(i -1, j)` 的不同路径数量加上从左上角到 `(i, j -1)` 的不同路径数量。这是因为我们可以从左上角移动到 `(i -1, j)` 或 `(i, j -1)`,然后再移动一步到 `(i, j)`。

最终答案是 `dp[m as usize -1][n as usize -1]`,即从左上角到右下角的不同路径数量。

**时间复杂度**

时间复杂度为 O(m * n),因为我们需要填充一个 m x n 的数组。

**空间复杂度**

空间复杂度为 O(m * n),因为我们需要存储一个 m x n 的数组。

其他信息

其他资源

Top