数字子串的总和

3 java algorithm complexity-theory big-o

找到数字子串总和的最佳解决方案是什么?

例如,Sum(123)= 1 + 2 + 3 + 12 + 23 + 123 = 164.

我认为这是O(n ^ 2).因为

sum = 0
for i in number: // O(n)
    sum += startwith(i) // O(n)
return sum
Run Code Online (Sandbox Code Playgroud)

有什么最佳方案?什么是最好的方法?

这是我的解决方案,但O(n ^ 2):

public static int sumOfSubstring(int i) {
  int sum = 0;

  String s = Integer.toString(i);

  for (int j = 0, bound = s.length(); j < bound; j++) {
   for (int k = j; k < bound; k++) {
    String subString = s.subSequence(j, k + 1).toString();
    sum += Integer.valueOf(subString);
   }
  }

  return sum;
 }
Run Code Online (Sandbox Code Playgroud)

Gab*_*abe 13

观察:

  • 对于数字XY,您有11X + 2Y.
  • 对于数字XYZ,你有111X + 22Y + 3Z.
  • 对于WXYZ,你有1111W + 222X + 33Y + 4Z.

这是我的C#实现,尽管移植到Java应该是微不足道的:

static long SumSubtring(String s)
{
    long sum = 0, mult = 1;
    for (int i = s.Length; i > 0; i--, mult = mult * 10 + 1)
        sum += (s[i - 1] - '0') * mult * i;
    return sum;
}
Run Code Online (Sandbox Code Playgroud)

注意它实际上是O(n).