这段代码的大O是什么?我认为它的O(logn)因为每次递归,num得到/ = 10.否则,它必须是O(n)。有什么想法吗?
P.S:不是作业问题,只是面试的修改。所以答案很受欢迎。public class Solution {
public int addDigits(int num) {
int sum = 0;
while (num > 0){
sum += num % 10;
num /= 10;
}
if (sum < 10){
return sum;
}
else{
return addDigits(sum);
}
}
}
答案 0 :(得分:2)
我认为O(logn)
是正确的答案,因为O(logn)
只会在计算第一个while
时覆盖第一个sum
循环。但是当sum大于10时,如果新的O(log(sum))
大于10,你将进行另一轮计算,即sum
+另一轮计算。所以:
9999
,因此第一个总和将小于9 * 4),所以第二次计算最多为log(9 * logn)+第二次和的计算所以最终值似乎是O(logn + log(logn) + log(log(logn)) + ...)
- 它会在日志(log(...(logn)..))= 0时停止。