【发布时间】:2021-04-08 01:35:38
【问题描述】:
我这样做是为了解决其中一个 leetcode 问题,但我不确定我的算法的复杂性是什么。
public String countAndSay(int n) {
if (n == 1) return "1";
String pre = countAndSay(n-1);
char[] prev = pre.toCharArray();
int len = prev.length;
if (len == 1 && prev[0] == '1') return "11";
int idx = 1;
int rep = 1;
String res = "";
while (idx <= len) {
if (idx == len) {
res += (Integer.toString(rep) + prev[idx-1]);
break;
}
if (prev[idx-1] == prev[idx]) rep++;
else {
res += (Integer.toString(rep) + prev[idx-1]);
rep = 1;
}
idx++;
}
return res;
}
由于递归发生n次,循环是O(n),我觉得应该是O(n^2)。那是对的吗?如果不是,你能解释一下原因吗?
【问题讨论】:
-
这不正确,因为您忘记考虑结果字符串的长度。在 big-O 中,它可能归类为 O(2^n)。
-
@Andreas 假设字符串的长度是 m。为什么不是 O(mn)?
-
该方法只有一个输入:
n。没有m输入,所以公式不能基于m。
标签: performance time time-complexity big-o code-complexity