получение суммы всех подстрок ввода числовой строки - PullRequest
0 голосов
/ 11 ноября 2019

Я боролся с онлайн-соревнованием по программированию, которое попросило меня получить сумму всех подстрок ввода числовых строк , когда я обнаружил исключение, связанное с памятью.

Например, для ввода «123» желаемым выходом является «164». https://www.hackerrank.com/challenges/sam-and-substrings/problem

Проблема казалась простой, и я нашел решение для динамического программирования. То, что я сделал, было восходящим подходом, который собрал все подстроки и добавил их вместе.

Я думаю, что само решение было правильным, потому что оно прошло более 50% тестовых случаев. Вот мое простое решение:

static int substrings(string n)
        {
            decimal totalSubstring = 0;
            for (var i = 0; i < n.Length; i++)
            {
                for (var j = 1; j <= n.Length - i; j++)
                {
                    var strNumber = n.Substring(i, j);
                    decimal number = Convert.ToDecimal(strNumber);
                    totalSubstring = totalSubstring + (number);
                }
            }
            return (int)(totalSubstring % 1000000007);
        } 

Однако, когда он получил длинную строку (например, строку, содержащую более 6426 символов), ни один примитивный тип не смог бы содержать длинную преобразованную подпрограмму-string.

Я знаю, что ошибка звучит совершенно логично, хотя я не знаю, как обрабатывать длинные строки.

Пожалуйста ПРИМЕЧАНИЕ , что я не ищу точного ответа, и я хочу решить проблему самостоятельно. Я был бы рад, если бы кто-то мог дать мне подсказку или сказать мне, если это решение может быть исправлено.

Спасибо

1 Ответ

1 голос
/ 11 ноября 2019

Поскольку вы заявили, что хотите решить проблему самостоятельно, вот еще один способ подумать об этом. В примере «123» цифра 1 отображается как

1
10
100

цифра 2 отображается как

2
2
20
20

, а цифра 3 отображается как

3
3
3

1 + 10 + 100 + 2 + 2 + 20 + 20 + 3 + 3 + 3 = 164

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...