- 不同路径
js
function uniquePaths(m: number, n: number): number {
let arr: number[][] = new Array(m).fill(0).map(() => new Array(n).fill(1))
for (let i = 1; i < m; i++) {
for (let j = 1; j < n; j++) {
arr[i][j] = arr[i - 1][j] + arr[i][j - 1]
}
}
return arr[m - 1][n - 1]
};
java
class Solution {
public int uniquePaths(int m, int n) {
int[][] list = new int[m][n];
for(int i1 =0;i1<m;i1++){
for(int i2 =0;i2<n;i2++){
list[i1][i2] = 1;
}
}
for(int i1 =1;i1<m;i1++){
for(int i2 =1;i2<n;i2++){
list[i1][i2] = list[i1-1][i2] + list[i1][i2-1];
}
}
return list[m-1][n-1];
}
}
C#
public class Solution {
public int UniquePaths(int m, int n) {
int[,] list = new int[m, n];
for (int i = 0; i < n; i++) list[0,i] = 1;
for (int i = 0; i < m; i++) list[i,0] = 1;
for(int i1 =1;i1<m;i1++){
for(int i2 =1;i2<n;i2++){
list[i1,i2] = list[i1-1,i2] + list[i1,i2-1];
}
}
return list[m-1,n-1];
}
}
python
class Solution:
def uniquePaths(self, m: int, n: int) -> int:
arr = [[1] * n for _ in range(m)]
for i1 in range(m-1):
for i2 in range(n-1):
arr[i1+1][i2+1] = arr[i1][i2+1]+arr[i1+1][i2]
return arr[m-1][n-1]
- 不同路径 II
js
/**
* @param {number[][]} obstacleGrid
* @return {number}
*/
var uniquePathsWithObstacles = function (obstacleGrid) {
const m = obstacleGrid.length
const n = obstacleGrid[0].length
if (obstacleGrid[0][0] == 1) {
return 0
}
if (m == 1) {
for (let i = 0; i < n; i++) {
if (obstacleGrid[0][i] == 1) return 0
}
return 1
}
if (n == 1) {
for (let i = 0; i < m; i++) {
if (obstacleGrid[i][0]) return 0
}
return 1
}
let arr = new Array(m).fill(0).map(() => new Array(n).fill(0))
for (let i = 0; i < m; i++) {
if (obstacleGrid[i][0] == 0) {
arr[i][0] = 1
} else {
break
}
}
for (let i = 0; i < n; i++) {
if (obstacleGrid[0][i] == 0) {
arr[0][i] = 1
} else {
break
}
}
for (let i = 1; i < m; i++) {
for (let j = 1; j < n; j++) {
if (obstacleGrid[i][j] == 1) {
arr[i][j] = 0
} else {
arr[i][j] = arr[i - 1][j] + arr[i][j - 1]
}
}
}
return arr[m - 1][n - 1]
};