我正在参加一个在线编程竞赛,当我遇到与内存相关的异常时,要求我获取数字字符串输入的所有子字符串的总和。
例如,对于输入“ 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 个字符的字符串)时,没有任何原始类型可以容纳长转换后的子字符串。
虽然我不知道如何处理长字符串,但我知道错误完全听起来合乎逻辑。
请注意,我没有在寻找确切的答案,我想自己解决问题。如果有人可以给我提示或告诉我是否可以解决此问题,我将非常高兴。
谢谢
答案 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