【问题标题】:getting the sum of all sub-strings of a numeric string input获取数字字符串输入的所有子字符串的总和
【发布时间】:2019-11-11 08:59:06
【问题描述】:

我在一场在线编程竞赛中苦苦挣扎,该竞赛要求我获取数字字符串输入的所有子字符串的总和,当时我遇到了与内存相关的异常。

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

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

注意,我不是在寻找确切的答案,我想自己解决问题。如果有人可以给我提示或告诉我是否可以修复此解决方案,我会很高兴。

谢谢

【问题讨论】:

  • 也许使用BigInteger而不是decimal
  • 必须有一个更简单的解决方案。听说有C语言的开发者针对类似问题量身定做了解决方案!你有什么想法吗?
  • 我怀疑会有一个更简单的解决方案来处理超过 6K 位的数字!
  • @MatthewWatson 问题请求是返回模 10^9 + 7

标签: c# dynamic-programming


【解决方案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

【讨论】:

  • @Erno um 123 和 23 都有 2 作为 20?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-14
  • 1970-01-01
  • 2021-03-30
  • 1970-01-01
  • 2015-07-07
  • 2023-03-27
  • 1970-01-01
相关资源
最近更新 更多