输入:一个非负整数n。
输出:这个非负整数可以写成几个完全平方数。返回这个数量。
规则:完全平方数可以表示为某个整数的平方。例如:1,4,9…
分析:13=4+9 也就是说13可以写成2个完全平方数的和。我可以先把13写成1+1+1+…+1,13个1相加。接着去拼2∗2=42*2=42∗2=4,可以写成4+4+4+1。接着去拼3∗3=93*3=93∗3=9, 可以写成9+4。接着去拼4∗4=164*4=164∗4=16,16>13,退出。O__O "…没有写代码实现。
学习1:计算n以内的完全平方数,得到列表perfectSquares。
 初始化数组int[] cntPerfectSquares。perfectSquares所有值val,cntPerfectSquares[val]=1。
 以n以内的完全平方数为起点:1,4,9,… 每个节点i 与perfectSquares所有数据分别相加达到新的节点j,cntPerfectSquares[j]=cntPerfectSquares[i]+1。如果j=n,则退出返回cntPerfectSquares[n]。
 思路是这样的。可以使用BFS或者DP实现。

//BFS
public int numSquares(int n) {List<Integer> perfectSquares = new ArrayList<Integer>();int[] cntPerfectSquares = new int[n];for(int i=1;i*i<=n;i++){if(i*i==n) return 1;perfectSquares.add(i*i);cntPerfectSquares[i*i-1] = 1;}Queue<Integer> queue = new LinkedList<Integer>();for(Integer val : perfectSquares){queue.offer(val);}while(!queue.isEmpty()){int size = queue.size();for(int i=0;i<size;i++){int val = queue.poll();for(Integer val2 : perfectSquares){if(val+val2==n) return 1+cntPerfectSquares[val-1];if(val+val2<n && cntPerfectSquares[val+val2-1]==0){cntPerfectSquares[val+val2-1] = 1+cntPerfectSquares[val-1];queue.offer(val+val2);}}}}return -1;}

DP思路:cntPerfectSquares[i]表示至少有cntPerfectSquares[i]个完全平方数的相加等于i。
cntPerfectSquares[0]=1;
cntPerfectSquares[1]=1;
cntPerfectSquares[2]=cntPerfectSquares[2-1]+1;
cntPerfectSquares[3]=cntPerfectSquares[3-1]+1;
cntPerfectSquares[4]=Min(cntPerfectSquares[4−1∗1]+1,cntPerfectSquares[4−2∗2]+1))cntPerfectSquares[4]=Min(cntPerfectSquares[4-1*1]+1,cntPerfectSquares[4-2*2]+1))cntPerfectSquares[4]=Min(cntPerfectSquares[4−1∗1]+1,cntPerfectSquares[4−2∗2]+1))

cntPerfectSquares[i]=Min[cntPerfectSquares[i],cntPerfectSquares[i−j∗j]+1]cntPerfectSquares[i]=Min[cntPerfectSquares[i],cntPerfectSquares[i-j*j]+1]cntPerfectSquares[i]=Min[cntPerfectSquares[i],cntPerfectSquares[i−j∗j]+1], 1&lt;=i&lt;=n1&lt;=i&lt;=n1<=i<=n,1&lt;=j∗j&lt;=i1&lt;=j*j&lt;=i1<=j∗j<=i

public int numSquaresV2(int n) {int[] cntPerfectSquares = new int[n+1];//设置最大值for(int i=0;i<cntPerfectSquares.length;i++){cntPerfectSquares[i] = n+1;}cntPerfectSquares[0] = 0;for(int i=1;i<=n;i++){for(int j=1;j*j<=i;j++){cntPerfectSquares[i] = Math.min(cntPerfectSquares[i],cntPerfectSquares[i-j*j]+1);}}return cntPerfectSquares[n];}

代码

【Breadth-first Search 】279. Perfect Squares相关推荐

  1. LeetCode 279. Perfect Squares

    279. Perfect Squares Given a positive integer n, find the least number of perfect square numbers (fo ...

  2. leetcode 279. Perfect Squares | 279. 完全平方数(动态规划,Java)

    题目 https://leetcode.com/problems/perfect-squares/ 题解:动态规划 参考:[宫水三叶]详解完全背包一维空间优化推导(附背包问题攻略) 首先初始化长度为 ...

  3. leetcode -- 279. Perfect Squares

    Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 1 ...

  4. 279. Perfect Squares

    Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 1 ...

  5. Xiaohe-LeetCode 279 Perfect Squares

    (1)Best way.94% This one uses Lagrange's four-square theorem. According to it, every integer is a su ...

  6. 279 Perfect Squares 完美平方数

    给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...) 使得他们的和等于 n.你需要让平方数的个数最少. 比如 n = 12,返回 3 ,因为 12 = 4 + 4 + 4 : ...

  7. Taste/Thoth:Taste Architecture 概览【转Beyond Search】

    Taste 有着非常清晰的程序架构.看图说话,下面就是一个 User-based Recommender 的例图,说明了各个组件之间的关系.而对于一个 Item-based Recommender,除 ...

  8. 【Full text search】检索条件具有完整的关键词布尔逻辑运算AND、OR、NOT能力

    全文检索需求 1)系统提供模糊检索.分类搜索.高级复合搜索.全文检索.图片内容检索.跨库检索等多种检索途径: 2)支持字索引和词索引: 3)检索条件具有完整的关键词布尔逻辑运算AND.OR.NOT能力 ...

  9. 【全局路径规划】A*算法 A* Search Algorithm

    A Formal Basis for the Heuristic Determination of Minimum Cost Paths PETER E.HART NILS J. NILSSON BE ...

最新文章

  1. IOS中Cell自定义
  2. 方差分析(Analysis of Variance,ANOVA)是什么?方差分析的形式有哪些?
  3. 计算面平均边_计算机图形学补充2:齐次空间裁剪(Homogeneous Space Clipping)
  4. java ee开发环境_设置Java EE 6开发环境
  5. 【redis】分布式锁实现,与分布式定时任务
  6. 工业上 计算机控制系统分为哪两大类,控制仪表及装置——考试复习题
  7. 程序员编程艺术第二十六章:基于给定的文档生成倒排索引(含源码下载)
  8. 163Editor 编辑器概览
  9. gauscoor软件怎么用_比对软件STAR的简单使用
  10. android手势解锁代码,纯android代码实现九宫格手势密码
  11. java cmyk转rgb_图片 CMYK转RGB 代码
  12. php setlocale 中国,PHP setlocale无效
  13. 网站优化的关键词选择的重要性
  14. 好心情:抗抑郁药物的不良反应和处理措施
  15. 让 Directory Opus 支持 Windows 10 的暗色主题
  16. 集束搜索(Beam Search)
  17. 基于SARIMA、XGBoost和CNN-LSTM的时间序列预测对比
  18. 烽火2640路由器命令行手册-11-IP语音配置命令
  19. 计组-CISC与RISC
  20. 安装apk时提示安装失败,相同包名但是签名不一致

热门文章

  1. Ubuntu配置完全教程
  2. testNG之组测试
  3. 利用CSS、JavaScript及Ajax实现图片预加载的三大方法及优缺点分析
  4. web控件开发系列(四) 自定义控件属性(下)
  5. saltstack部署java应用失败无日志——CICD 部署
  6. @SpringBootApplication(exclude={DataSourceAutoConfiguration.class})注解作用
  7. 百度OCR文字识别API使用心得 com.baidu.ocr.sdk.exception.SDKError[283604]
  8. mongoose populate 返回 指定 字段
  9. Java JVM 汇编代码入门 GitChat链接
  10. .net core2.0 Memcached.ClientLibrary