classSolution{ funnumSquares(n: Int): Int { val queue = ArrayDeque<Int>() val visited = mutableSetOf<Int>() queue.add(n) var level = 0 while (queue.isNotEmpty()) { level++ val size = queue.size repeat(size) { val num = queue.poll() visited.add(num)
var j = 1 while (j * j <= num) { val small = num - j * j if (small == 0) return level if (!visited.contains(small)) { queue.add(small) } j++ } } } return -1 } }