leetcode279:Perfect Squares

2024-04-10 18:18
文章标签 perfect squares leetcode279

本文主要是介绍leetcode279:Perfect Squares,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

For example, given n = 12, return 3 because 12 = 4 + 4 + 4; given n = 13, return 2 because 13 = 4 + 9.

 题目分析:属于离散背包问题,背包问题(Knapsack problem)是一种组合优化的NP完全问题。问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。本题计算在n时,可以为n-j*j的值加1,这样的话就可以考虑使用动态规划。当当前值跟之前的值有一定的联系的时候,我们可以考虑使用动态规划。

具体代码如下

public int numSquares(int n) {if(n<=0) return 0;int[] dp=new int[n+1];dp[0]=0;dp[1]=1;for(int i=2;i<=n;i++){int min=Integer.MAX_VALUE;int j=1;//找到合适的j,当j*j<=i时可以不断尝试while(j*j<=i){if(j*j==i){min=1;break;}//更新minmin=Math.min(min, dp[i-j*j]+1);j++;}dp[i]=min;}return dp[n];}


这篇关于leetcode279:Perfect Squares的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/891788

相关文章

usaco 1.2 Palindromic Squares(进制转化)

考察进制转化 注意一些细节就可以了 直接上代码: /*ID: who jayLANG: C++TASK: palsquare*/#include<stdio.h>int x[20],xlen,y[20],ylen,B;void change(int n){int m;m=n;xlen=0;while(m){x[++xlen]=m%B;m/=B;}m=n*n;ylen=0;whi

CodeForces 425D Sereja and Squares

题意: 平面上有n个点  问  最多能组成多少个边与坐标轴平行的正方形 思路: 这是一个通过不断二分查找乱搞的题… 首先枚举左下角  然后分别往上往右找左上角和右下角 这时如果发现边长不想等就通过长边长度在短边的方向二分查找最接近的值  不停往上往右延伸 如果发现边长想等了  那么要判断一下对应的左上角坐标出是不是有一个点 怎么判断呢  通过将所有点hash出一个值  然后二分

前向保密(Forward Secrecy,也称为完美前向保密,Perfect Forward Secrecy,PFS)

前向保密(Forward Secrecy,也称为完美前向保密,Perfect Forward Secrecy,PFS)是一种加密通信协议的属性,它确保即使在未来某个时间点上长期使用的私钥(如服务器的私钥)被泄露,攻击者也无法解密之前已经捕获并记录的加密通信内容。这意味着每次通信会话都使用一个独立的、临时的会话密钥进行加密,即使主私钥被泄露,之前的通信记录也仍然保持安全。 工作原理 前向保密通常

POJ1274_The Perfect Stall(二分图最大匹配)

解题报告 http://blog.csdn.net/juncoder/article/details/38136193 题目传送门 题意: n头m个机器,求最大匹配。 ps 一分钟前刚做了POJ1469 直接改了输入输出就交了,题意完全一样,,,sad ,代码传送门 The Perfect Stall Time Limit: 1000MS Memory Limit: 1

【二分查找】-POJ-2002-Squares

题目链接:http://poj.org/problem?id=2002 题目描述:给出平面上若干个点,问能最多构成几个不重复的正方形。 解题思路: 第一反应是标记数组直接搜,好吧,内存超限。然后想了BFS或者DFS,太没前途了。然后想了哈希,不失为一种方法,但是不会操作。好吧还是按照九野大神选题的初衷来做吧——二分查找,为了锻炼自己,嗯!手写!好吧,我写的只是二分找 x 坐标,y 坐标没二分

python 实现perfect square完全平方数算法

python 实现perfect square完全平方数算法介绍 完全平方数(Perfect Square)是一个整数,它可以表示为某个整数的平方。例如,1,4,9,16,25,… 都是完全平方数,因为 1 = 1 2 , 4 = 2 2 , 9 = 3 2 1=1^2,4=2^2,9=3^2 1=12,4=22,9=32,依此类推。 要判断一个给定的数 n 是否是完全平方数,有几种方法可以

P2730 [USACO3.2] 魔板 Magic Squares

[USACO3.2] 魔板 Magic Squares 题目背景 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板。这是一张有 8 8 8 个大小相同的格子的魔板: 1 2 3 4 1\quad2\quad3\quad4 1234 8 7 6 5 8\quad7\quad6\quad5 8765 题目描述 我们知道魔板的每一个方格都有一种颜色。这 8 8 8 种颜

Leetcode 391. Perfect Rectangle

解题思想 这道题是说给了一堆小矩形的坐标(左下角和右上角围成的),问其能否组合成一个完美的矩形(刚刚好,不多,不少,不交叉重复)。 核心思想就是:能够正好围成一个矩形的情况就是: 有且只有: 最左下/最左上/最右下/最右上的四个点只出现过一次,其他肯定是出现两次和四次(保证完全覆盖) 上面四个点围成的面积,正好等于所有子矩形的面积之和(保证不重复) Leetcode代码收录,求粉求星星。

PAT甲级 1085 Perfect Sequence 二分和双指针(Two Pointers)

二分写法 #include <bits/stdc++.h>using namespace std;int find_upper_bound(const vector<long long>& nums, long long x){int beg = 0, end = nums.size(), mid = beg + (end - beg) / 2;while (beg < end) {mid

POJ 2002 Squares hash求正方形个数

题意:给你n个点 坐标都小于20000 数一下可以组成多少个正方形 思路:借鉴了网上hash的思路 哈希链地址法 把x+y的绝对值相同的放人一个链表里 然后枚举2个点(1条边上的) 推算出另外2个点 另外2点分别是 x1 = a[i].x+(a[i].y-a[j].y);y1 = a[i].y-(a[i].x-a[j].x); x2 = a[j].x+(a[i].y-a[j].y);y2