这是一个计算十进制数基本版本的代码。我不确定它的时间复杂性。 谢谢,
public static String convertToBase(int num, int base) {
if (base > 36) {
throw new IllegalArgumentException("The input argument should be less than or equal to 36.");
}
final StringBuilder sb = new StringBuilder();
while (num > 0) {
final int div = num % base;
if (div > 9) {
final int sum = div + 55;
sb.append((char) sum);
} else {
sb.append(div);
}
num = num / base;
}
return sb.reverse().toString();
}
答案 0 :(得分:2)
严格来说,答案是O(1)
。
如果int
是支持任意精度的整数类型,那么答案显然是O(logN)
。
但事实并非如此! int
不得超过Integer.MAX_INT
,其中2 ^ 31 - 1 ...或大约20亿。
因此,如果我们让N
(无界整数)倾向于无穷大,num
的值会回绕,以使它永远不会超过Integer.MAX_INT
。这意味着,如果(例如)base
为10
,则while
循环最多可以 log10(2^31)
次执行(即10次)。 ..而convertToBase
是O(1)
。
但是,如果您准备滥用术语/符号,可以表示它O(logN)
足够小N
。
答案 1 :(得分:1)
算法的复杂性是
IF Base = 36,num = 35 .............迭代次数为1 IF Base = 02,num = 35 .............迭代次数为6
这里的数字迭代次数=以(log)为基数的(num)的Log。
因此时间复杂度很大-O(Log(n))
答案 2 :(得分:1)
正如Stephen C所说,复杂性是O(1),因为n是有界的。
如果n是任意精度数,则复杂度为 O(M(n)log(n)) 其中M(n)是乘法的复杂性(因为有“num / base”运算)。