leetcode 279. Perfect Squares
2016-02-29 17:47
423 查看
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.
超时
稍作修改
class Solution {
private:
int minnum;
vector<int>minpath;
public:
void do_once(int squarenum,int& remain,vector<int>&path)
{
if(path.size()>=minnum-1)
return;
for(int i=squarenum;i>=1;i--)
{
vector<int>pathcopy=path;
pathcopy.push_back(i);
int rem=remain-i*i;
if(rem==0)
{
if(pathcopy.size()<minnum)
{
minnum=pathcopy.size();
minpath=pathcopy;
}
}
else if(rem>0)
{
if(pathcopy.size()+1<minnum)
{
int startnum=sqrt(remain-i*i);
if(startnum>i)
startnum=i;
do_once(startnum,rem,pathcopy);
}
}
}
}
int numSquares(int n) {
int outsquare=sqrt(n);
minnum=100000;
while(outsquare!=0)
{
if(n/(outsquare*outsquare)>=minnum)
return minnum;
int insquare=sqrt(n-outsquare*outsquare);
if(insquare>outsquare)
insquare=outsquare;
int remain=n-outsquare*outsquare;
if(remain==0)
return 1;
vector<int>path;
path.push_back(outsquare);
do_once(insquare,remain,path);
outsquare--;
}
return minnum;
}
};
accepted
For example, given n = 12, return 3 because 12 = 4 + 4 + 4; given n = 13, return 2 because 13 = 4 + 9.
// ConsoleApplication1.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include<vector> #include<iostream> using namespace std; class Solution { private: int minnum; vector<int>minpath; public: void do_once(int squarenum,int& remain,vector<int>&path) { if(path.size()>=minnum-1) return; for(int i=squarenum;i>=1;i--) { vector<int>pathcopy=path; pathcopy.push_back(i); int rem=remain-i*i; if(rem==0) { if(pathcopy.size()<minnum) { minnum=pathcopy.size(); minpath=pathcopy; } } else if(rem>0) { if(pathcopy.size()+1<minnum) { int startnum=sqrt(remain-i*i); if(startnum>i) startnum=i; do_once(startnum,rem,pathcopy); } } } } int numSquares(int n) { int outsquare=sqrt(n); minnum=100000; while(outsquare!=0) { if(n/(outsquare*outsquare)>=minnum) return minnum; int remain=n; vector<int>path; do_once(outsquare,remain,path); outsquare--; } } }; int _tmain(int argc, _TCHAR* argv[]) { Solution sl; cout<<sl.numSquares(7168); system("pause"); return 0; }
超时
稍作修改
class Solution {
private:
int minnum;
vector<int>minpath;
public:
void do_once(int squarenum,int& remain,vector<int>&path)
{
if(path.size()>=minnum-1)
return;
for(int i=squarenum;i>=1;i--)
{
vector<int>pathcopy=path;
pathcopy.push_back(i);
int rem=remain-i*i;
if(rem==0)
{
if(pathcopy.size()<minnum)
{
minnum=pathcopy.size();
minpath=pathcopy;
}
}
else if(rem>0)
{
if(pathcopy.size()+1<minnum)
{
int startnum=sqrt(remain-i*i);
if(startnum>i)
startnum=i;
do_once(startnum,rem,pathcopy);
}
}
}
}
int numSquares(int n) {
int outsquare=sqrt(n);
minnum=100000;
while(outsquare!=0)
{
if(n/(outsquare*outsquare)>=minnum)
return minnum;
int insquare=sqrt(n-outsquare*outsquare);
if(insquare>outsquare)
insquare=outsquare;
int remain=n-outsquare*outsquare;
if(remain==0)
return 1;
vector<int>path;
path.push_back(outsquare);
do_once(insquare,remain,path);
outsquare--;
}
return minnum;
}
};
accepted
相关文章推荐
- JavaScript之基本概念
- JSTL中<c:set>标签的用法
- effective js-8-尽量少用全局对象
- HTML+CSS学习笔记 (6) - 开始学习CSS
- 关于文字不能两端都对其的样式
- HTML+CSS学习笔记(5)- 与浏览者交互,表单标签
- angular路由小笔记
- JavaScript:执行环境及作用域
- HTML+CSS学习笔记(4) - 认识标签(3)
- jquery validation ajax 验证
- 对jsp九大内置对象的理解
- jQuery 分页插件 jPages 使用
- jQuery取得select选择的文本与值
- HTML+CSS学习笔记(3)- 认识标签(2)
- PRVF-5486 : The NTP Daemon On The Indicated Nodes Is Not Using UDP Port 123 (文档 ID 1378412.1)
- JavaScript知识归纳(2)
- JSONP跨域请求数据报错 “Unexpected token :”的解决办法
- SharePoint2016 New Feature(Preview) - 改善使用者体验
- jQuery插入,复制、替换和删除节点
- The nodes should be added to the underlying vendor clusterware before adding them to the CRS cluster