我在Scala
上写了一段代码。现在我想估计时间和内存的复杂性。
问题陈述
给定正整数n
,找到总和为n
的最小正方形数(例如,1,4,9,16 ......)。
例如,给定n = 12
,返回3
,因为12 = 4 + 4 + 4
;给定n = 13
,返回2
,因为13 = 4 + 9
。
我的代码
def numSquares(n: Int): Int = {
import java.lang.Math._
def traverse(n: Int, ns: Int): Int = {
val max = ((num: Int) => {
val sq = sqrt(num)
// a perfect square!
if (sq == floor(sq))
num.toInt
else
sq.toInt * sq.toInt
})(n)
if (n == max)
ns + 1
else
traverse(n - max, ns + 1)
}
traverse(n, 0)
}
我在这里使用递归解决方案。所以恕我直言的时间复杂度是O(n)
,因为我需要使用递归来遍历数字序列。我对吗?我错过了什么吗?