Автор оригинала: David Wong.
Подъем по лестнице
Стержень вопроса:
Предположим, вы поднимаетесь по лестнице. Вам потребуется n шагов, чтобы подняться на вершину здания. Вы можете подниматься на одну или две ступеньки за раз. Сколькими различными способами вы можете подняться на вершину здания? Примечание: заданное n является положительным целым числом. Пример 1: ввод: 2. Результат: 2. Пояснение: есть два способа подняться на крышу. 1. Заказ 1 + заказ 1 2. Заказ 2 пример 2: ввод: 3. Результат: 3. Пояснение: есть три способа подняться на крышу. 1. 1 заказ + 1 заказ + 1 заказ 2. 1 заказ + 2 заказа 3. 2 заказа + 1 заказ источник: сила пряжка
Этот вопрос поднимайтесь по лестнице Это классическая иди в ритме.
Размышления о решении проблем
Есть два способа решить эту проблему
1. Динамическое программирование
2. Последовательность Фибоначчи
Динамическое программирование-это более важные навыки и идеи для решения проблем. Я напишу серию статей, которые помогут вам лучше понять динамическое планирование.
Мы используем этот вопрос Последовательность Фибоначчи Чтобы понять.
Последовательность Фибоначчи также называется последовательностью Фибоначчи Серия кроликов , относится к: 1, 1, 2, 3, 5, 8, 13, 21 В математике его рекурсивная формула такова: F, f, f (n – 1) + F (n – 2) (n ≥ 3, n ∈ n *).
В этой теме мы можем найти, что: Есть два способа пройти по второй лестнице : 1-й заказ + 1-й заказ, 2-й заказ Есть три способа пройти по трем лестницам : 1 заказ + 1 заказ, 1 заказ + 2 заказа, 2 заказа + 1 заказ Есть пять способов пройти по четырем лестницам : 1 заказ + 1 заказ + 1 заказ + 1 заказ, 1 заказ + 2 заказа + 1 заказ, 1 заказ + 1 заказ + 2 заказа, 2 заказа + 2 заказа, 2 заказа + 1 заказ + 1 заказ ……
Подводя итог, мы можем обнаружить, что существует m методов подъема по n-ступенчатой лестнице, и M соответствует последовательности Фибоначчи Закон, так прямо по кодексу!
Реализация Go
//Fibonacci sequence
// 1 1 2 3 5 8 13 ....
func climbStairs2(n int) int {
//Step 1 directly returns to 1
if n == 1 {
return 1
}
//Step 2 direct return 2
if n == 2 {
return 2
}
current := 2
pre := 1
//The current step method is the sum of the first two steps
for i := 3; i <= n;i ++ {
current = current + pre
pre = current - pre
}
return current
}Реализация PHP, в общей сложности две версии реализации, посмотрите, какой код вам нравится
function climbStairs($n) {
// if($n==1) return 1;
// $dp[1]=1;
// $dp[2]=2;
// for($i=3;$i<=$n;$i++){
// $dp[$i]=$dp[$i-1]+$dp[$i-2];
// }
//
// return $dp[$n];
if($n <= 2) return $n;
$dp = [1 => 1,2 => 2];
foreach(range(3,$n+1) as $v){
//Recursive addition, this stair climbing is fibolache algorithm to find the final sum of F (n-1) + F (n-2)
$dp[$v] = $dp[$v-1] + $dp[$v-2];
}
return $dp[$n];
}резюме
Эта статья о реализации алгоритма подъема по лестнице на языке go и PHP подробное объяснение статьи, представленной здесь, больше связано с содержанием алгоритма подъема по лестнице на языке go PHP пожалуйста, найдите предыдущие статьи или продолжайте просматривать соответствующие статьи ниже, я надеюсь, что вы будете поддерживать developeppaer больше в будущем!
Оригинал: “https://developpaper.com/detailed-explanation-of-stair-climbing-algorithm-based-on-go-and-php/”