欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 279. 完全平方数

279. 完全平方数

2024/11/30 12:49:01 来源:https://blog.csdn.net/m0_63653444/article/details/139567843  浏览:    关键词:279. 完全平方数

在这里插入图片描述

解法一、回溯法:

class Solution {public int numSquares(int n) {return numSquaresHepler(n);}public int numSquaresHepler(int n){if(n == 0) return 0;int count = Integer.MAX_VALUE;for(int i = 1; i * i <= n; i++){count = Math.min(count,numSquaresHepler(n - i * i) + 1);}return count;}
}

解法二、HashMap 优化回溯法

解法一超时,解法二优化通过使用 HashMap 保存

class Solution {public int numSquares(int n) {return numSquaresHepler(n,new HashMap<Integer,Integer>());}public int numSquaresHepler(int n,HashMap<Integer,Integer> map){if(map.containsKey(n)) return map.get(n);if(n == 0) return 0;int count = Integer.MAX_VALUE;for(int i = 1; i * i <= n; i++){count = Math.min(count,numSquaresHepler(n - i * i,map) + 1);}map.put(n,count);return count;}
}

解法三、动态优化

递归相当于先压栈压栈然后出栈出栈,动态规划可以省去压栈的过程。

动态规划的转移方程就对应递归的过程,动态规划的初始条件就对应递归的出口。

class Solution {public int numSquares(int n) {int[] dp = new int[n+1];Arrays.fill(dp,Integer.MAX_VALUE);dp[0] = 0;for(int i = 1; i <= n; i++){//依次减去一个平方数for(int j = 1; j * j <= i; j++){dp[i] = Math.min(dp[i],dp[i-j*j]+1);}}return dp[n];}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com