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
观察:
这是我的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).
| 归档时间: |
|
| 查看次数: |
2818 次 |
| 最近记录: |