int uniquePaths(int m, int n) {
function<int(int, int)> paths = [&](int r, int c) -> int {
if (r == 0 || c == 0) return 1;
return paths(r - 1, c) + paths(r, c - 1);
};
return paths(m - 1, n - 1);
}
public int uniquePaths(int m, int n) {
return paths(m - 1, n - 1);
}
private int paths(int r, int c) {
if (r == 0 || c == 0) return 1;
return paths(r - 1, c) + paths(r, c - 1);
}
def unique_paths(m, n):
def paths(r, c):
if r == 0 or c == 0: return 1
return paths(r - 1, c) + paths(r, c - 1)
return paths(m - 1, n - 1)
function uniquePaths(m: number, n: number): number {
const paths = (r: number, c: number): number => {
if (r === 0 || c === 0) return 1;
return paths(r - 1, c) + paths(r, c - 1);
};
return paths(m - 1, n - 1);
}
int uniquePaths(int m, int n) {
unordered_map<int, int> memo;
function<int(int, int)> paths = [&](int r, int c) -> int {
if (r == 0 || c == 0) return 1;
int key = r * n + c;
auto known = memo.find(key);
if (known != memo.end()) return known->second;
int result = paths(r - 1, c) + paths(r, c - 1);
memo[key] = result;
return result;
};
return paths(m - 1, n - 1);
}
public int uniquePaths(int m, int n) {
Map<Integer, Integer> memo = new HashMap<>();
return paths(m - 1, n - 1, n, memo);
}
private int paths(int r, int c, int n, Map<Integer, Integer> memo) {
if (r == 0 || c == 0) return 1;
int key = r * n + c;
Integer known = memo.get(key);
if (known != null) return known;
int result = paths(r - 1, c, n, memo) + paths(r, c - 1, n, memo);
memo.put(key, result);
return result;
}
def unique_paths(m, n):
memo = {}
def paths(r, c):
if r == 0 or c == 0: return 1
key = r * n + c
known = memo.get(key)
if known is not None: return known
result = paths(r - 1, c) + paths(r, c - 1)
memo[key] = result
return result
return paths(m - 1, n - 1)
function uniquePaths(m: number, n: number): number {
const memo = new Map<number, number>();
const paths = (r: number, c: number): number => {
if (r === 0 || c === 0) return 1;
const key = r * n + c;
const known = memo.get(key);
if (known !== undefined) return known;
const result = paths(r - 1, c) + paths(r, c - 1);
memo.set(key, result);
return result;
};
return paths(m - 1, n - 1);
}
int uniquePaths(int m, int n) {
vector<vector<int>> dp(m, vector<int>(n, 1));
for (int r = 1; r < m; r++) {
for (int c = 1; c < n; c++) {
dp[r][c] = dp[r - 1][c] + dp[r][c - 1];
}
}
return dp[m - 1][n - 1];
}
public int uniquePaths(int m, int n) {
int[][] dp = new int[m][n];
for (int[] line : dp) Arrays.fill(line, 1);
for (int r = 1; r < m; r++) {
for (int c = 1; c < n; c++) {
dp[r][c] = dp[r - 1][c] + dp[r][c - 1];
}
}
return dp[m - 1][n - 1];
}
def unique_paths(m, n):
dp = [[1] * n for _ in range(m)]
for r in range(1, m):
for c in range(1, n):
dp[r][c] = dp[r - 1][c] + dp[r][c - 1]
return dp[m - 1][n - 1]
function uniquePaths(m: number, n: number): number {
const dp = Array.from({ length: m }, () => new Array<number>(n).fill(1));
for (let r = 1; r < m; r++) {
for (let c = 1; c < n; c++) {
dp[r][c] = dp[r - 1][c] + dp[r][c - 1];
}
}
return dp[m - 1][n - 1];
}
int uniquePaths(int m, int n) {
vector<int> row(n, 1);
for (int r = 1; r < m; r++) {
for (int c = 1; c < n; c++) {
row[c] += row[c - 1];
}
}
return row[n - 1];
}
public int uniquePaths(int m, int n) {
int[] row = new int[n];
Arrays.fill(row, 1);
for (int r = 1; r < m; r++) {
for (int c = 1; c < n; c++) {
row[c] += row[c - 1];
}
}
return row[n - 1];
}
def unique_paths(m, n):
row = [1] * n
for r in range(1, m):
for c in range(1, n):
row[c] += row[c - 1]
return row[n - 1]
function uniquePaths(m: number, n: number): number {
const row = new Array<number>(n).fill(1);
for (let r = 1; r < m; r++) {
for (let c = 1; c < n; c++) {
row[c] += row[c - 1];
}
}
return row[n - 1];
}