获取数字字符串输入的所有子字符串的总和

时间:2019-11-11 08:59:06

标签: c# dynamic-programming

我正在参加一个在线编程竞赛,当我遇到与内存相关的异常时,要求我获取数字字符串输入的所有子字符串的总和

例如,对于输入“ 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 个字符的字符串)时,没有任何原始类型可以容纳长转换后的子字符串。

虽然我不知道如何处理长字符串,但我知道错误完全听起来合乎逻辑。

注意,我没有在寻找确切的答案,我想自己解决问题。如果有人可以给我提示或告诉我是否可以解决此问题,我将非常高兴。

谢谢

1 个答案:

答案 0 :(得分:1)

由于您说过要自己解决问题,因此这是另一种思考方法。在示例“ 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