62. Уникальные пути
Содержание
Автоматический перевод
Эта статья переведена автоматически с английский на русский. Оригинал доступен на английский.
Задача
Робот находится в левом верхнем углу сетки m x n (отмечен как ‘Start’ на диаграмме ниже).
Робот может двигаться только вниз или вправо в любой момент времени. Робот пытается достичь правого нижнего угла сетки (отмечен как ‘Finish’ на диаграмме ниже).
Сколько существует возможных уникальных путей?
Пример 1
Вход: m = 7, n = 3
Выход: 28Пример 2
Вход: m = 3, n = 2
Выход: 3
Объяснение:
Из левого верхнего угла существует всего 3 способа достичь правого нижнего угла:
1. Вправо -> Вправо -> Вниз
2. Вправо -> Вниз -> Вправо
3. Вниз -> Вправо -> ВправоОграничения
- 1 <=
m, n<= 100 - Гарантируется, что ответ будет меньше или равен 2 * 10 ^ 9.
Решение
Динамическое программирование
Основная идея - динамическое программирование:
func numTrees(n int) int {
a:= make(map[int]int, 0)
a[0] = 1
a[1] = 1
a[2] = 2
return helper(n , a)
}
func helper(n int, a map[int]int) int {
if _, ok := a[n]; ok {
return a[n]
}
res := 0
for idx := 0; idx<n; idx++ {
res += (helper(idx, a)*helper(n-idx-1, a))
}
a[n] = res
return a[n]
}