Perfect Squares解题报告

Description:

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

Example:

Given n = 12, return 3 because 12 = 4 + 4 + 4
Given n = 13, return 2 because 13 = 4 + 9

Link:

http://www.lintcode.com/en/problem/perfect-squares/

题目意思:

给出一个正整数n,求这个正整数最小可以由几个平方数相加而成。

解题方法:

使用dp来解题,创建一个size为n+1的数组来储存从1~n的每个数的题解(平方数则为1)。
状态转移方程为dp[n] = min(dp[i] + dp[n-i])

Tips:

for(int j = 1; j*j <= i/2; j++) result[i] = result[i] > result[j*j] + result[i-j*j] ? result[j*j] + result[i-j*j] : result[i];
j换成了j*j,是可以跳过一些不是平方数的数字,如果不换的话Lintcode时间报错但是leetcode可以AC。

Time Complexity:

当把j换成了j*j后,时间复杂度为O(nlogn),否则为O(n^2)。
空间复杂度为O(n)。

完整代码:

int numSquares(int n) { if(n < 1) return 0; vector<int> result(n+1, INT_MAX); for(int i = 1; i*i <= n; i++) result[i*i] = 1; for(int i = 2; i <= n; i++) { if(result[i] == INT_MAX) for(int j = 1; j*j <= i/2; j++) result[i] = result[i] > result[j*j] + result[i-j*j] ? result[j*j] + result[i-j*j] : result[i]; } return result[n]; }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,973评论 0 33
  • 回溯算法 回溯法:也称为试探法,它并不考虑问题规模的大小,而是从问题的最明显的最小规模开始逐步求解出可能的答案,并...
    fredal阅读 14,052评论 0 89
  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 2,092评论 0 2
  • 动态规划(Dynamic Programming) 本文包括: 动态规划定义 状态转移方程 动态规划算法步骤 最长...
    廖少少阅读 3,686评论 0 18
  • 午加餐:枣糕,麦片 参考目标: 1份肉2份豆制品3份“新鲜”水果4份谷物/薯5份蔬菜,深绿色叶菜最好6杯水 今日总...
    静趣_儿童心理师阅读 190评论 0 0

友情链接更多精彩内容