Так как речь идет о таблице, то лучше перебрать рекурсивно. Логично , что количество путей для клетки (i,j) - это количество путей для правой соседней клетки + количество путей для нижней соседней клетки.
При таком условии мы будем посещать те же клетки слишком часто, однако значение для них меняться не будет. Имеет смысл вычислить их единожды и запомнить для последующих использований. (На самом деле, достаточно иметь буфер вместимостью всего в 6 элементов, но мы сделаем полное запоминание).
(Иллюстрация 3 - таблица кэша)
Иллюстрации кода и возможного вывода прикреплены в дополнительных материалах.
========================
Ваши оценки и отзывы позволяют лучше оценить качество ответа.
Если ответ удовлетворил, не забудь отметить его как "Лучший".
Так как речь идет о таблице, то лучше перебрать рекурсивно. Логично , что количество путей для клетки (i,j) - это количество путей для правой соседней клетки + количество путей для нижней соседней клетки.
При таком условии мы будем посещать те же клетки слишком часто, однако значение для них меняться не будет. Имеет смысл вычислить их единожды и запомнить для последующих использований. (На самом деле, достаточно иметь буфер вместимостью всего в 6 элементов, но мы сделаем полное запоминание).
(Иллюстрация 3 - таблица кэша)
Иллюстрации кода и возможного вывода прикреплены в дополнительных материалах.
========================
Ваши оценки и отзывы позволяют лучше оценить качество ответа.
Если ответ удовлетворил, не забудь отметить его как "Лучший".
Успехов в учёбе!
========================
Код:
cache = {}
def calculate_max_way_price(x: int, y: int, m:int, n:int):
if (x, y) in cache:
return cache[(x, y)]
x_way, y_way = 0, 0
if x < m - 1:
x_way = calculate_max_way_price(x + 1, y, m, n)
if y < n - 1:
y_way = calculate_max_way_price(x, y + 1, m, n)
if x == m - 1 and y == n - 1:
cache[(x, y)] = 1
return 1
cache[(x, y)] = x_way + y_way
return x_way + y_way
N = int(input("Enter N value: "))
M = int(input("Enter M value: "))
print(calculate_max_way_price(0, 0, N, M))
Метод CountNumbersAfterDot() реализует вычисления количества цифр после запятой.
Метод ChekNumber() - обёертка для вызова метода, передающая аргумент и результат на старндартный вывод.
Иллюстрации кода в закреплённых материалах. Сам код - ниже.
=======================
Оценки и отзывы лучше оценить качество ответа.
Если ответ удовлетворил, отметь его как "Лучший".
=======================
Код:
using System;
using System.Text.RegularExpressions;
namespace CountNumbersAfterTheDot
{
public static class Somebody
{
public static void Main()
{
CheckNumber("2.1563");
CheckNumber("11.11.11");
CheckNumber("");
CheckNumber("15");
}
private static Result<int> CheckNumber(string number)
{
var checkResult = CountNumbersAfterDot(number);
Console.WriteLine($"{number} :- {checkResult}");
return checkResult;
}
private static Result<int> CountNumbersAfterDot(string number) {
var numberTemplate = new Regex(@"[+-]?^\d+(.\d+)?$");
if (numberTemplate.IsMatch(number))
{
var dotPosition = number.LastIndexOf(".", StringComparison.Ordinal);
return dotPosition == -1 ? Result<int>.CreateResult(0) : Result<int>.CreateResult(number.Length - dotPosition - 1);
}
else
{
return Result<int>.CreateError($"[{number}] is not a number!");
}
}
}
public class Result<T> {
public T Data { get; }
public string Error { get; }
public bool Success => string.IsNullOrEmpty(Error);
private Result(T data, string error)
{
Data = data;
Error = error;
}
public static Result<T> CreateResult(T data)
{
return new Result<T>(data, null);
}
public static Result<T> CreateError(string error)
{
error = string.IsNullOrWhiteSpace(error) ? "Error!" : error;
return new Result<T>(default(T), error);
}
public override string ToString()
{
return Success ? Data.ToString() : Error;
}
}
}