从count=1一直遍历到n,找到的第一个符合条件的count就是返回结果。
class Solution { Set<Integer> square_nums = new HashSet<Integer>(); protected boolean is_divided_by(int n, int count) { if (count == 1) { return square_nums.contains(n); } for (Integer square : square_nums) { if (is_divided_by(n - square, count - 1)) { return true; } } return false; } public int numSquares(int n) { this.square_nums.clear(); for (int i = 1; i * i <= n; ++i) { this.square_nums.add(i * i); } int count = 1; for (; count <= n; ++count) { if (is_divided_by(n, count)) return count; } return count; } }