Поэтому я создал эту программу для создания различных лестничных пролетов. По сути, проблема такова: учитывая целое число N, сколькими различными способами можно построить лестницу. N гарантированно больше 3 и меньше 200. Любой предыдущий шаг не может быть больше следующего за ним шага, иначе это противоречит цели лестницы.
Таким образом, учитывая N = 3, вы можете построить одну лестницу: 2 шага, а затем 1 шаг после этого.
Учитывая N = 4, вы можете построить одну лестницу: 3 ступени, а затем 1 ступень после этой.
Учитывая N = 5, вы можете построить две лестницы: 3 ступени, а затем 2 ступени ИЛИ 4 ступени, а затем 1 ступень.
Мой метод ниже, и он работает, за исключением того, что его время выполнения слишком медленное. Так что я думал попробовать сделать мемоизацию для метода, но, честно говоря, я не совсем понимаю, как это реализовать. Если бы я мог получить некоторую помощь о том, как это сделать, это было бы здорово.
public static void main(String [] args)
{
System.out.println(answer(200));
}
public static int answer(int n) {
return bricks(1,n) -1;
}
public static int bricks(int height, int bricksLeft)
{
if(bricksLeft == 0)
{
return 1;
}
else if(bricksLeft < height)
{
return 0;
}
else
{
return bricks(height +1, bricksLeft - height) + bricks(height +1, bricksLeft);
}
}