java – 数字的子串的总和

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

例如,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

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

这是我的解决方案,但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;
 }

解决方法

观察:

>对于数字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;
}

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

相关文章

摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠...
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠...
今天犯了个错:“接口变动,伤筋动骨,除非你确定只有你一个...
Writer :BYSocket(泥沙砖瓦浆木匠)微 博:BYSocket豆 瓣:...
本文目录 线程与多线程 线程的运行与创建 线程的状态 1 线程...