输出整数分解的全部解,解要从大到小的输出
Example:
input: n = 12
output:
12*1
6*2
4*3
Example:
input: n = 12
output:
12*1
6*2
4*3
3*2*2
void Impl(vector<vector<int> >& res, vector<int>& rec, int num, int upperLimit)
{
if(upperLimit == 1)
{
res.push_back(rec);
return;
}
for(int i=upperLimit;i>=2;--i)
{
if(num % i == 0)
{
rec.push_back(i);
Impl(res,rec,num/i,min(i,num/i));
rec.pop_back();
}
}
}
vector<vector<int> > f(int n)
{
vector<vector<int> > res;
if(n <= 0)
return res;
vector<int> rec;
//handle special case of n*1
rec.push_back(n);
rec.push_back(1);
res.push_back(rec);
rec.clear();
Impl(res,rec,n,n/2);
return res;
}
本文详细阐述了整数分解的算法实现,包括输入整数的分解过程,并以递归方式展示了解的输出顺序,从大到小排列。通过实例演示了如何将整数分解为若干个整数相乘的形式,特别关注于特殊情况如n*1的处理。


被折叠的 条评论
为什么被折叠?



