思路一:就是搜索问题,
在数据中查找满足某种条件的组合
,根据组合问题
则可以采用递归+回溯
的深度优先搜索算法
/**
* 回溯法:
* 相当于一种暴力法:考虑所有的分解方案,找出最小的解
* 超出时间限制
*/
public int numSquares(int n) {
return numSquaresHelper(n,new HashMap<>());
}
//暴力回溯
private int numSquaresHelper(int n) {
if (n == 0) {
return 0;
}
int count = Integer.MAX_VALUE;
//依次减去一个平方数
for (int i = 1; i * i <= n; i++) {
//选最小的
count = Math.min(count, numSquaresHelper(n - i * i) + 1);
}